CAS - Compare and Swap

1 什么是CAS

CAS是compare and swap的缩写,中文可以翻译成:比较并交换。CAS操作来源于底层硬件领域。因为CAS能够极大地提高并发效率,因此在硬件设计领域,CAS这种操作就是存在的

synchronized这种独占锁属于悲观锁,乐观锁最常见的就是CAS

CAS的思想本质上就是乐观锁思想。即:假设情况都是乐观的,那么当前内存位置V的值是预期原值A,如果这样,请把内存位置V的值设置为新值B;否则,乐观的情况不成立,什么也别做。

乐观锁的思想减少了使用同步块等悲观锁的开销,但是本质是基于乐观锁思想的,因此肯定存在一些问题,即在高并发的情况下,有时需要进行多轮CAS操作才能完成值的更新。

 

2 CAS原理

CAS 有三个操作数:当前值A、内存值V、要修改的新值B

 

 

3 CAS缺点

会带来ABA的问题例如:

1. 线程A读到当前值是10,可能线程B把值修改为100,然后线程C又把值修改为10

2.等到线程A拿到执行权时,因为当前值和内存值是一致的,线程A是可以修改的

3.这是不合理的,因为我们从上帝的角度来看,这个变量已经被线程B和线程C修改过了

 

 解决办法:Java也提供了AtomicStampedReference类供我们用,说白了就是加了个版本,比对的就是内存值+版本是否一致

 

 

posted @ 2022-11-22 19:23  NingShare  阅读(30)  评论(0编辑  收藏  举报