如何解释多线程环境中的读/写全局变量

时间:2015-11-04 10:19:53

标签: multithreading global-variables atomic

我不熟悉多线程和锁以及原子/非原子操作。

最近我看到一个面试问题如下。

f1f2放在两个单独的主题中并同时运行它们,当它们都返回时,a的值是多少?

int a = 2, b = 0, c = 0
func f1()
{
    a = a * 2
    a = b
}
func f2()
{
    c = a + 11
    a = c
}

我尝试在目标c环境中实现上述代码,我得到的是a = 11。我不确定这是否正确,因为我所做的是将f1放入主队列并将f2放入调度全局队列并运行异步,这可能是不正确的。

如果有人可以根据register accessingCPU processingmemory usage的级别给出答案并解释该过程,那就太棒了。

1 个答案:

答案 0 :(得分:0)

答案是 - A的结果是随机的。它可以是任何东西。由于对A的访问不是原子的并且没有同步,因此不同的线程可能会根据随机因素看到不同的值。如果您设法在X86上进行未对齐并运行它,您甚至可能会看到a的非值。