7

拿这个线程:

a = 3; b = 3;

并采取这个线程:

b = 5; a = 5;

他们都从监视器访问相同的数据。

如果它们都同时运行(通过使用线程),可能的结果是什么?

4

1 回答 1

8

因为线程的操作可以按任何顺序执行,所以 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% 的时间内得出该结果。但是,您无法保证这种可能性;事实上,您几乎可以肯定操作系统以某种未知的方式存在偏见。教训是,你不应该试图依赖未定义的行为来为你做任何事情。

(我知道最后一部分有点超出了问题的范围,但我认为需要牢记。)

于 2013-01-12T20:10:22.330 回答