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的非值