java compareAndSet返回值是否保证了“之前发生”关系?
我相信在这个问题上有很多问题被问到,但我想所有的问题都回避了我
我的问题出现了,因为我看过同一代码的变体,其中自旋锁与原子比较数据集相结合,我想关键是要确保一种先发生后发生的关系
A。get()在循环开始时执行,此ref将用作“expect”,如果在事务结束时值仍然与开始时相同,则返回
compareAndSet返回的唯一用途是从循环返回
如果Java锁被认为是自适应的,这意味着它们结合了旋转和上下文切换,那么仅仅同步主体而不是执行双嵌套旋转锁不是更方便吗,因为compareAndSet正在其中执行第二个循环
原子类似乎可以放置一个带有函数参数的方法来执行自定义事务,而不是强迫人们执行外部循环,缺少此选项是我对compareAndSet返回感到困惑的部分原因,因为返回值似乎有同样的用途,但我想不是
# 1 楼答案
在^{} 的javadoc之后,JVM清楚地将它们视为
volatile
,我们可以在这里找到许多描述,包括:Java volatile and side-effects简短回答:是的