线程导致竞态条件。

4

线程问题

我最初认为该问题的正确答案是A,因为m2可以部分使用并调用语句C,而如果m1中不存在"b",那么锁"a"和"b"不会相互保护,会调用语句B。

我认为C是错误的,因为同步方法不应该使用类本身作为锁,这样当m2被同步使用时,如果它被同步,就不能进入类。

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

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

1个回答

1
我会选择A。这将消除操作statementB;statementC;之间的互斥性,可能以一种破坏事物的方式违反它。
B和D是锁粒度的不可观察的降低,可能会降低性能。
C是锁粒度的可观察变化,可能会暴露其他客户端的问题锁定。 C对代码的行为没有重大影响。 这是一个有点棘手的问题。 它可能最终在客户端代码中变得重要,但在本地并不重要。 它保留了所有原始本地保证语句的互斥性。
A肯定是答案。

你能否详细说明一下为什么C不是正确答案,并解释一下我为什么认为它是正确的吗? - user2977578
如果你有机会的话,请在那个上面点个赞 @user2977578 ;) - Alain O'Dea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接