JUC-CAS和自旋到底是一个概念吗

问题:

CAS是compare and swap ,就是一个比较工作内存和主内存的值是否相同,相同的话,就用新值来替换这么一个操作。

但是,为什么好多地方都说这是自旋呢?

我的理解是,比较一次的话,成功就返回true了,失败,那么就返回false。如果没有for循环的话,这就是一次操作啊,它本身不会去重试吧?只有在for死循环里边,才可以重试啊,很多底层都是这样做的。

所以,仅仅是CAS的话,就是一次操作,为什么叫做自旋呢。自旋的概念到底就是说是CAS,还是说有for循环的才叫CAS。

回答:

你的理解大体上是没问题的,稍微还有一点不完美。

自旋和CAS不是一回事儿,只是再CAS的时候可以利用自旋机制来不断重试

自旋是一种锁优化机制,所以锁优化中会有『自旋锁』的概念(线程空转重试获取锁),自旋不一定是用在CAS场景,其他锁场景也是能用的(比如互斥锁)

CAS是一种更新的原子操作,是实现乐观锁的机制,CAS可以不用自旋机制,失败也可以直接返回false。只是一般应用场景下,CAS都会带有重试机制(while和for实现空转,不断尝试)

文章作者: GeYu
文章链接: https://nuistgy.github.io/2023/04/11/JUC-CAS和自旋的概念区别/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Yu's Blog