gpt4 book ai didi

java - 线程导致竞争条件

转载 作者:搜寻专家 更新时间:2023-11-01 03:35:22 25 4
gpt4 key购买 nike

a threading question

我最初假设这个问题的正确答案是 A,因为 m2 可以部分使用并调用语句 C 而调用语句 B,因为如果“b”,“a”和“b”这两个锁不会相互保护在第一个 m1 中不存在。

我认为 C 是错误的,因为同步方法是否意味着使用类本身作为锁,所以如果 m2 被同步,那么任何东西都无法进入类?

现在我想知道我对 C 所做的假设是否正确。因为虽然它使用自己作为锁,但 m1 正在使用 b 作为锁来保护语句 B。这意味着有两个监视器(“B”和“this”),从而允许冲突使 C 成为正确答案?但我也很确定 A 也是正确的。

如果您发现我的推理有任何缺陷,或者您是否知道正确答案以及原因,请告诉我。

最佳答案

我会选择 A。它消除了操作 statementB;statementC; 之间的互斥,可能会以破坏事物的方式违反它。

B 和 D 是无法观察到的锁粒度减少,可能会降低性能。

C 是锁粒度的一个可观察到的变化,它可能会暴露其他客户端有问题的锁定。 C 不是 代码行为的重大变化。这是一个有点棘手的问题。它最终可能在客户端代码中很重要,但在本地并不重要。它保留了声明互斥的所有原始本地保证。

A 绝对是答案。

关于java - 线程导致竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33661942/

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