Java通过其原子类公开CAS操作,例如:
AtomicInteger.compareAndSet(expected,update)
当expected == update
时,这些调用是无操作还是仍然具有易失性读写的内存一致性效果(如expected != update
时那样)?
答案 0 :(得分:0)
AFAIK没有检查expected == update
并且行为没有变化。如果硬件没有这样做,可以添加循环,我怀疑它没有。
在任何情况下,我都不会编写依赖于调用CAS的副作用的代码。
如果您认为可能的话,可以自己添加支票。
答案 1 :(得分:0)
我浏览了本机代码,并且在值相等方面似乎没有任何差别。特别是在这种情况下,因为整数等价在引用上不这样做。
它将在事件expected != update
需要注意的是,该字段的位置始终存在至少一个易失性负载,因此您至少会对backing int字段进行易失性读取。