什么是CAS

一、什么是CAS

CAS: 全称Compare and swap,字面意思:”比较并交换“,是一种轻量级锁。
线程在读取数据是不进行加锁,在准备修改数据时,先去查询原值,操作的时候比较原值是否被修改,若未被其他线程修改则写入数据,若已经被修改,就要重新执行读取流程。
举个例子:
我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。 1. 比较 A 与 V 是否相等。(比较) 2. 如果比较相等,将 B 写入 V。(交换) 3. 返回操作是否成功。
当多个线程同时对某个资源进行CAS操作,只能有一个线程操作成功,但是并不会阻塞其他线程,其他线程只会收到操作失败的信号。可见 CAS 其实是一个乐观锁。

二、关于ABA问题

1.什么是ABA问题
1.线程1读取了数据A,线程2也读取了数据A。
2.线程2通过CAS比较,发现是原数据A没错,于是就将数据A改为了数据B。
3.线程3此时通过CAS比较,发现原数据就是数据B,于是就将数据B改成数据A。
4.此时,线程1通过CAS比较,发现原数据是A,就改成了自己要改的值。
虽然说线程1最后能能操作成功,但是这样已经违背了CAS的初衷,数据已经被修改过了,按CAS的原则来讲,CAS是不应该修改成功的。

2.如何解规避ABA问题

可以设置一个自增的标志位,数据的每一次修改标志位都会自增,比较标志位的值,还可以加上时间戳,显示上一次修改的时间,比较时间戳的值。

三、CAS的缺点

1.循环时间长,开销大,如果CAS失败,会一直尝试,如果CAS一直不成功,会给CPU带来很大的开销
2.只能保证一个共享变量的原子操作
3.就是上面说到的ABA问题

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值