我不熟悉多线程和锁以及原子/非原子操作。
最近我看到一个面试问题如下。
将f1
和f2
放在两个单独的主题中并同时运行它们,当它们都返回时,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 accessing
,CPU processing
,memory usage
的级别给出答案并解释该过程,那就太棒了。
答案 0 :(得分:0)
答案是 - A的结果是随机的。它可以是任何东西。由于对A的访问不是原子的并且没有同步,因此不同的线程可能会根据随机因素看到不同的值。如果您设法在X86上进行未对齐并运行它,您甚至可能会看到a的非值。