CAS学习
定义:
CAS即compare and swap 是基于硬件级别的指令实现的同步原语,JUC中许多同步类基于CAS构建。
原理:
CAS包含三个操作数-内存位置值、预期值、新值。如果内存位置值与预期值相同,那么处理器会自动将内存位置值替换成新值。如果CAS执行失败,则会重新取内存中的值,继续CAS,直到成功,如果竞争激烈,则会竞争次数过多。
CAS存在的问题及解决办法:
1.效率问题。如果多个线程竞争则可能导致CAS失败,此时需要自旋执行CAS,竞争激烈情况下可能会对性能有一定影响。解决办法是使用自适应自旋锁。
2.ABA问题。CAS过程中其他线程将变量从A修改为B,再将B修改为A,CAS判断没变化执行操作,实际上值是被修改的,与设计原语不符。Automic包中引入automicStampReference类来解决这个问题。每次更新时将变量的版本号+1,之前的ABA问题,版本号就会变成3,从而解决了ABA。
---------------------------------------------------------
原文:https://blog.csdn.net/qq_24395625/article/details/124416222