什么是CAS

CAS是compare and swap,例如:生成唯一不重复自增ID的功能,可以用两种方法来实现:、
1、加锁方式
维护一个全局变量Long ID,每次线程请求生成新ID首先将全局ID锁住,ID++生成完新ID后解锁,再提供给其他线程使用。
可以保证ID的唯一性,但是效率低下,被锁住后都要排队等候解锁。
2、CAS方式
(1)维护一个全局变量Long ID,每次线程请求生成新ID不加锁,只获取当前ID值,
(2)ID++后再次查询全局ID,如果当前全局ID还是之前获取的ID,那么将全局ID改为ID++后的值,
如果ID++后查询到当前全局ID不是之前获取的ID,那么重新获取全局ID++后再重复查询全局ID比较,直到查询到的ID与全局ID匹配为止
(3)CAS方式会有ABA问题:
ABA问题是指:线程A查询到全局ID=1,此时线程B做了全局ID++操作后又做了ID--操作,线程A ID++后再回来查询全局ID还是=1,这时线程A不知道全局ID被修改过了。
ABA问题解决:定义一个全局ID版本号,每次修改全局ID后都生成一个新的版本,所有线程都以ID版本号为修改依据

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值