如果线程工作完美,'x' 可以有的最大值是 15。这完全取决于操作系统的调度程序。
请注意,我假设 x 的初始值为 0!假设线程 A 和线程 B 是序列化的。线程 A 完成后 x 的值为 5。
i | x
-------
0 | 1
1 | 2
2 | 3
3 | 4
4 | 5
进入线程 B 的 x 的值为 5,导致 x 的最终值为 15
i | x
-------
0 | 7
1 | 9
2 | 11
3 | 13
4 | 15
现在,事情通常不会以这种方式发生,一个线程将读取 x 的初始值并进行加法,然后将修改后的值写回内存。可能会发生以下情况。
Thread A reads the value 'x' as 0
Thread B reads the value 'x' as 0
Thread A adds 1 to x making its local copy of x, 1
Thread B adds 2 to x making its local copy of x, 2
Thread A writes its modified value of x as 1
Thread B writes its modified value of x as 2 (overwriting Thread A's modification)
因此,x 不会超过 15,但取决于调度程序,会更少!