CAS是什么?

乌拉 / 82 /

ChatGPT 可用网址,仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友。
https://ckai.xyz

悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后,下一个线程才可以 访问。

而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处理资源,比如 通过给记录加 version 来获取数据,性能较悲观锁有很大的提高。

CAS 是 compare and swap 的缩写,即我们所说的比较和交换。

cas 是一种基于锁的操作,是乐观锁的一个典型代表。

CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存地址里面的值和 A 的值是一样的,那么就将内存里面的值更新成 B。

CAS 是通过无限循环来获取数据的,若果在第一轮循环中,a 线程获取地址里面的值 被 b 线程修改了,那么 a 线程需要自旋,到下次循环才有可能机会执行。

CAS 的会产生什么问题?

1.ABA问题

CAS需要在操作值的时候检查内存值是否发生变化,没有发生变化才会更新内存值。但是如果内存值原来是A,后来变成了B,然后又变成了A,那么CAS进行检查时会发现值没有发生变化,但是实际上是有变化的。

ABA问题的解决思路就是在变量前面添加版本号,每次变量更新的时候都把版本号加一,这样变化过程就从“A-B-A”变成了“1A-2B-3A”。

2、循环时间长开销大。CAS操作如果长时间不成功,会导致其一直自旋,给CPU带来非常大的开销。


作者
乌拉
许可协议
CC BY 4.0
发布于
2023-09-25
修改于
2024-07-25
Bonnie image
尚未登录