3
我有一个关于比赛条件场景的问题。这样的问题:比赛条件场景
考虑以下两个线程,要在共享存储器 同时运行(所有变量两个线程之间共享)。
Thread A
for i = 1 to 5 do
x = x + 1;
Thread B
for j = 1 to 5 do
x = x + 1;
假设一个单一处理器系统中,即加载和存储是原子的, 是x被递增(和存储回之前初始化为0,并且x必须被加载到寄存器 之后),在两个线程完成之后,x的所有可能值都是什么 ?
现在答案是2:10(含)。我明白5:10的结果,但x怎么可能是2,3或4?
感谢非常多;) – Milk
嗨@nhahtdh我不明白你应用的逻辑。请给出一些链接来了解下层逻辑。另外线程2如何读/写4次,而线程1只读一次。你能帮我 – rakeshNS
@rakeshNS:你知道x = x + 1涉及读取寄存器x的值,然后(做计算,并且)将新值写入表示变量x的内存(读取先于写入)。两个线程的读/写总数为5.线程之间的上下文切换为每个线程保留了寄存器中的值,但由于两个线程的x在内存中的位置相同,因此当线程在读取之间切换时会发生问题/写。 – nhahtdh