CAS如何实现

CAS(CompareandSwap)是一种用于并发编程的原子操作,确保在多线程环境下对变量的更新不会被其他线程干扰。它通过比较内存地址上的值与期望值,在相等的情况下更新为新的值,从而避免了加锁带来的开销,保证了线程安全。CAS通常由单条CPU指令实现,提高了并发性能。
摘要由CSDN通过智能技术生成

CAS(compare and swap)

可以将CAS操作看成是这样一段代码:

 

 

address:内存地址,储存的是现在的值

expectValue:期望值,开始拿进来的时候的值

swapValue:交换值,进行操作后的值

比如我们在进行一个count++的时候:

expectValue就是进行++操作时刚拿进去的值

swapValue就是进行++操作之后的值

address就是现在count的内存地址

在进行++操作后,先看看address里的值是否等于expectValue,如果发生了变化,就不和swapValue进行交换

如果等于expectValue,说明没有发生变化,就和swapValue进行交换

这样做的目的就是防止在count++的过程中count的值由于别的操作发生了变化,如果这时候将count的值变成count++后的值就导致count的值不准确

上述代码并非原子的,在运行过程中就可能随着线程调度有概率产生问题

但是真正的CAS操作其实是一条CPU指令,这一条指令就能完成上述这一段代码的功能

CAS就像是打开了新世界的大门,可以不进行加锁就保证线程安全

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值