gpt4 book ai didi

java - 线程交错 - 可以输出什么可能的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:11 24 4
gpt4 key购买 nike

接受这个话题:

a = 3; b = 3;

并接受这个线程:

b = 5; a = 5;

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

如果它们同时运行(通过使用线程),可能会出现什么结果?

最佳答案

因为线程的操作可以按任何顺序执行,所以 a=3,5 和 b=3,5 的任何组合都是可能的。

为 future 的读者澄清:

线程 1:a=3 b=3线程 2:b=5 a=5

可能的操作订单:

我:线程 1,线程 1,线程 2,线程 2

II:线程 1、线程 2、线程 1、线程 2

III:线程 1、线程 2、线程 2、线程 1

IV:线程 2、线程 1、线程 2、线程 1

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

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

关于java - 线程交错 - 可以输出什么可能的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14297472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com