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

Multithreading 如何解释多线程环境中的读/写全局变量,multithreading,global-variables,atomic,Multithreading,Global Variables,Atomic,我不熟悉多线程、锁和原子/非原子操作 最近我看到一个面试问题如下 将f1和f2放在两个单独的线程中,同时运行它们,当它们都返回时,a的值是多少 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放在调度全局队列中,

我不熟悉多线程、锁和原子/非原子操作

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

f1
f2
放在两个单独的线程中,同时运行它们,当它们都返回时,
a
的值是多少

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
放在调度全局队列中,并异步运行,这可能是不正确的


如果有人能给出答案,并根据
寄存器访问
CPU处理
内存使用
的级别解释过程,那就太好了。

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