如何解释Read/Write 多线程环境下的全局变量

How to explain Read/Write global variables in multi threads environment

我不熟悉多线程和锁以及atomic/nonatomic操作。

最近看到一道面试题如下。

f1f2放在两个单独的线程中,同时运行它们,当它们都return时,[=的值是多少? 14=]?

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

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

如果有人能按照register accessingCPU processingmemory usage的水平给出答案并说明流程就好了

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

的非值