问题:
CAS是compare and swap ,就是一个比较工作内存和主内存的值是否相同,相同的话,就用新值来替换这么一个操作。
但是,为什么好多地方都说这是自旋呢?
我的理解是,比较一次的话,成功就返回true了,失败,那么就返回false。如果没有for循环的话,这就是一次操作啊,它本身不会去重试吧?只有在for死循环里边,才可以重试啊,很多底层都是这样做的。
所以,仅仅是CAS的话,就是一次操作,为什么叫做自旋呢。自旋的概念到底就是说是CAS,还是说有for循环的才叫CAS。
回答:
你的理解大体上是没问题的,稍微还有一点不完美。
自旋和CAS不是一回事儿,只是再CAS的时候可以利用自旋机制来不断重试
自旋是一种锁优化机制,所以锁优化中会有『自旋锁』的概念(线程空转重试获取锁),自旋不一定是用在CAS场景,其他锁场景也是能用的(比如互斥锁)
CAS是一种更新的原子操作,是实现乐观锁的机制,CAS可以不用自旋机制,失败也可以直接返回false。只是一般应用场景下,CAS都会带有重试机制(while和for实现空转,不断尝试)