拿这个线程:
a = 3; b = 3;
并采取这个线程:
b = 5; a = 5;
他们都从监视器访问相同的数据。
如果它们都同时运行(通过使用线程),可能的结果是什么?
拿这个线程:
a = 3; b = 3;
并采取这个线程:
b = 5; a = 5;
他们都从监视器访问相同的数据。
如果它们都同时运行(通过使用线程),可能的结果是什么?
因为线程的操作可以按任何顺序执行,所以 a=3,5 和 b=3,5 的任意组合都是可能的。
为未来的读者澄清:
Thread-1: a=3 b=3
,
Thread-2: b=5 a=5
可能的操作订单:
I:线程 1、线程 1、线程 2、线程 2
二:线程1、线程2、线程1、线程2
III:线程 1、线程 2、线程 2、线程 1
IV:线程 2、线程 1、线程 2、线程 1
五:线程2,线程2,线程1,线程1
VI:线程 2、线程 1、线程 1、线程 2
让我们尝试每一个:
I: a=3, b=3, b=5, a=5 --> a=5, b=5
II: a=3, b=5, b=3, a=5 --> a=5, b=3
III: a=3, b=5, a=5, b=3 --> a=5, b=3
IV: b=5, a=3, a=5, b=3 --> a=5, b=3
V: b=5, a=5, a=3, b=3 --> a=3, b=3
VI: b=5, a=3, b=3, a=5 --> a=5, b=3
请注意,有四种方法可以提出a=5,b=3
. 因此,如果您对每个线程排序有一个公平的概率,您将在大约 67% 的时间内得出该结果。但是,您无法保证这种可能性;事实上,您几乎可以肯定操作系统以某种未知的方式存在偏见。教训是,你不应该试图依赖未定义的行为来为你做任何事情。
(我知道最后一部分有点超出了问题的范围,但我认为需要牢记。)