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

全部评论

相关推荐

07-31 14:40
门头沟学院 Java
代码主理人:触发重传机制了,可能是服务器负载太高了,ACK丢包了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务