|
|
1
5
布尔值或对象引用的单个读取是原子的。所以,如果将一个共享值与一个常量或局部变量进行比较,就不需要“互锁”。如乔恩所说,你需要
如果两个比较数是共享的,那么您将需要一个实际的锁。没有一种方法可以原子地比较两个共享值。 更新: 我确实建议为共享数据引入显式锁。请记住,原始代码完全被破坏了,所以不要羞于更改它。 如果你考虑一下,你会对比较的结果做些什么?这真的没有意义;一旦你得到结果,它可能是错误的。一个锁需要保持更长的时间,而不仅仅是为了比较,以便比较对任何事情都有用。 |
|
|
2
6
你不能让整个比较成为原子性的,但它不是你真正感兴趣的原子性。我怀疑这是波动性。这就是当你读到一个值时,你肯定会得到最新的版本,而不是看到一个值 是 在过去的某个时候有效,但可能不是。如果你 真正地 需要整个读/读/比较部分的原子性,我怀疑您需要锁定。
你可以使用
您是否必须首先使用无锁线程?我强烈建议要么建立在更大的结构之上(例如并行扩展),要么仅仅使用共享数据的锁(在可能的情况下应该尽量避免)。 |