CAS原理

什么是CAS

CAS的全称是Compare And Swap 即比较交换,它将指定内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。

CAS具有原子性,可以实现多线程同步

CAS就是乐观锁的典型代表

执行函数:CAS(V,E,N)

V表示要更新的变量

E表示预期值

N表示新值



更新逻辑

  • V==E表明变量符合预期值,可以对其进行更新。将V设置为N
  • V!=E证明有其他线程已经做了更新,本次线程不进行操作。可以读取E值重复一次


ABA问题

如线程1从内存X中取出A,这时候另一个线程2也从内存X中取出A,并且线程2进行了一些操作将内存X中的值变成了B,然后线程2又将内存X中的数据变成A,这时候线程1进行CAS操作发现内存X中仍然是A,然后线程1操作成功。虽然线程1的CAS操作成功,但是整个过程就是有问题的。比如链表的头在变化了两次后恢复了原值,但是不代表链表就没有变化。

所以JAVA中提供了AtomicStampedReference/AtomicMarkableReference来处理会发生ABA问题的场景,主要是在对象中额外再增加一个标记来标识对象是否有过变更。




版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接,感谢各位看官!!!

本文出自:monkeyGeek

座右铭:生于忧患,死于安乐

欢迎志同道合的朋友一起交流、探讨!

monkeyGeek
# ,

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×