compareAndSet预期内存效果==更新

时间:2012-09-19 13:40:03

标签: java concurrency compare-and-swap

Java通过其原子类公开CAS操作,例如:

AtomicInteger.compareAndSet(expected,update)

expected == update时,这些调用是无操作还是仍然具有易失性读写的内存一致性效果(如expected != update时那样)?

2 个答案:

答案 0 :(得分:0)

AFAIK没有检查expected == update并且行为没有变化。如果硬件没有这样做,可以添加循环,我怀疑它没有。

在任何情况下,我都不会编写依赖于调用CAS的副作用的代码。

如果您认为可能的话,可以自己添加支票。

答案 1 :(得分:0)

我浏览了本机代码,并且在值相等方面似乎没有任何差别。特别是在这种情况下,因为整数等价在引用上不这样做。

它将在事件expected != update

中以相同的内存一致性运行相同的逻辑

需要注意的是,该字段的位置始终存在至少一个易失性负载,因此您至少会对backing int字段进行易失性读取。