CAS 原理以及ABA问题

发布时间:2024年01月17日

Java面试题

CAS 原理

CAS 全称是Compare and Swap,比较再交换。比较内存中某个值是否和预期值相同,如果相同则将这个值更新为新值,不相同则不更新。

CAS自旋锁

使用一个死循环进行 CAS 操作,成功了就结束循环返回,失败了就重新从内存读取值和计算新值,再进行 CAS,直到成功。

CAS缺点

1自旋时间长,浪费cpu资源。

? ? ? ? 出现锁竞争时,等待线程会一直通过自旋来竞争锁,浪费了cpu资源。

2.只能保证一个变量的原子操作。

? ? ? ? CAS只能针对一个共享变量使用,如果多个变量都需要保证原子操作,就只能使用锁。

3.ABA问题。

? ? ? ? 内存中的值由A变成B,然后又变回A后,当CAS检查时,无法发现是否被修改过。

ABA问题解决方法:版本号控制,判断版本是否一致,每次修改版本都+1.

?CAS的应用

AtomicXXX开头的原子类,保证了多线程环境下共享变量的原子操作。

文章来源:https://blog.csdn.net/liguo886/article/details/135634151
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。