CAS 无锁编程

CAS (compare and swap) 比较与交换

一谈到锁,很多时间就会涉及到“阻塞等待”,只要代码加锁了,那这段代码就很可能与“高性能”无缘了。因此,为了实现线程安全又兼并高性能,CAS就应运而生了。
CAS是一条cpu指令 ,证明它是原子的。它可以想象成一个方法:
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/96978a0f3f584e2493b1daeccc883da0.png

大体上是可以看成这样子。其实Java中,也有类对CAS进行了进一步的封装。最典型的便是“原子类”。
由于Java不支持运算符重载,无法针对原子类进行++ --操作,于是就通过方法来替代原有的运算符。
在这里插入图片描述
在这里插入图片描述

通过上述方法就可以实现不加锁的++ --运算了。由于它们都是原子的,所以都是线程安全的,有效地提高了安全性和效率。下面我写一个基于CAS实现自旋锁的伪代码来给你们方便理解:
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/41a3b1755b034fb89fbd02fc95d68d28.png

注意:CAS的核心是“比较-发现相等-交换” =》 发现相等并不等于数据中间没有发生改变。
在这里插入图片描述
这种情况下,CAS是无法区分的,但大多情况下,影响不大。除非是极端情况,可能会出现bug!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值