CAS保障原子性
2023-12-14 16:44:25 0 举报
CAS保障原子性
作者其他创作
大纲/内容
根据Unsafe实例封装的原子对象,Atomic包中的底层都是用Unsafe实现的
Version 版本号,版本号和数据的版本号一致就可以执行修改操作并对版本号执行加1操作, 否则执行失败
缺点
CAS操作
概念
通过sun.misc.Unsafe实例,间接调用
ABA问题
保障
OS提供原语cmpxchg(若当前值和期望值一样,那么就更新为目标值)
Unsafe提供的cas方法
使用 CAS 进行无锁编程CAS是一种无锁算法, 该算法关键依赖两个值——期望值( 就值) 和新值, 底层CPU利用原子操作判断内存原值与期望值是否相等, 如果相等就给内存地址赋新值, 否则不做任何操作。
CAS 的 ABA问题也就是当expected从A被改成B再改回A的时候CAS识别不出expected的变化,还是cas成功了,造成的值变化的过程丢失问题。
CAS无索编程例子:使用CAS进行无锁编程的步骤大致如下:1) 获得字段的期望值(oldValue) 。2) 计算出需要替换的新值(newValue) 。3) 通过CAS将新值(newValue) 放在字段的内存地址上, 如果CAS失败就重复第1) 步到第2)步, 直到CAS成功, 这种重复俗称CAS自旋。使用CAS进行无锁编程的伪代码如下:do{获得字段的期望值(oldValue) ;计算出需要替换的新值(newValue) ;} while (!CAS(内存地址, oldValue, newValue))
源自
JAVA
Atomic类
解决方案
java解决方案
原子性
直接在内存地址进行比较并赋值,十分高效且底层
0 条评论
下一页