线程导致竞争条件
Threading causes race condition
我原先假设这道题的正确答案是A,因为m2可以部分使用,调用语句C,而调用语句B,因为"a"和"b"两个锁不保护如果第一个 m1 中不存在 "b"。
C 我认为是错误的,因为同步方法不意味着使用 class 本身作为锁,所以如果 m2 被同步,那么任何东西都无法进入 class ?
现在我想知道我对 C 所做的假设是否正确。因为虽然它使用自己作为锁,但 m1 正在使用 b 作为锁来保护语句 B。这意味着有两个监视器,("B" 和 "this"),从而允许冲突使 C 成为正确答案?但我也很确定 A 也是正确的。
如果您发现我的推理有任何缺陷,或者您是否知道正确答案以及原因,请告诉我。
我会选择 A。它消除了操作 statementB; 和 statementC; 可能在某种程度上违反它的互斥那会破坏东西。
B 和 D 是无法观察到的锁粒度减少,可能会降低性能。
C 是锁粒度的一个可观察到的变化,它可能会暴露其他客户端有问题的锁定。 C 对 this 代码的行为没有重大改变。这是一个有点棘手的问题。它最终可能在客户端代码中很重要,但在本地并不重要。它保留了语句互斥的所有原始本地保证。
答案肯定是A
我原先假设这道题的正确答案是A,因为m2可以部分使用,调用语句C,而调用语句B,因为"a"和"b"两个锁不保护如果第一个 m1 中不存在 "b"。
C 我认为是错误的,因为同步方法不意味着使用 class 本身作为锁,所以如果 m2 被同步,那么任何东西都无法进入 class ?
现在我想知道我对 C 所做的假设是否正确。因为虽然它使用自己作为锁,但 m1 正在使用 b 作为锁来保护语句 B。这意味着有两个监视器,("B" 和 "this"),从而允许冲突使 C 成为正确答案?但我也很确定 A 也是正确的。
如果您发现我的推理有任何缺陷,或者您是否知道正确答案以及原因,请告诉我。
我会选择 A。它消除了操作 statementB; 和 statementC; 可能在某种程度上违反它的互斥那会破坏东西。
B 和 D 是无法观察到的锁粒度减少,可能会降低性能。
C 是锁粒度的一个可观察到的变化,它可能会暴露其他客户端有问题的锁定。 C 对 this 代码的行为没有重大改变。这是一个有点棘手的问题。它最终可能在客户端代码中很重要,但在本地并不重要。它保留了语句互斥的所有原始本地保证。
答案肯定是A