CAS存在哪些问题?

简介: CAS存在哪些问题?
  • ABA问题。CAS需要在操作值的时候检查内存值是否发生变化,没有发生变化才会更新内存值。但是如果内存值原来是A,后来变成了B,然后又变成了A,那么CAS进行检查时会发现值没有发生变化,但是实际上是有变化的。ABA问题的解决思路就是在变量前面添加版本号,每次变量更新的时候都把版本号加一,这样变化过程就从A-B-A变成了1A-2B-3A
    JDK从1.5开始提供了AtomicStampedReference类来解决ABA问题,原子更新带有版本号的引用类型。
  • 循环时间长开销大。CAS操作如果长时间不成功,会导致其一直自旋,给CPU带来非常大的开销。
  • 只能保证一个共享变量的原子操作。对一个共享变量执行操作时,CAS能够保证原子操作,但是对多个共享变量操作时,CAS是无法保证操作的原子性的。
    Java从1.5开始JDK提供了AtomicReference类来保证引用对象之间的原子性,可以把多个变量放在一个对象里来进行CAS操作。
相关文章
|
存储 编译器 API
锁与原子操作CAS
锁与原子操作CAS
151 0
|
存储 资源调度 安全
H3C CAS系列 一、CAS初认识
对于虚拟化,可能第一时间大家想到的是虚拟机,而对于虚拟机大家可能第一时间想到的就是我们大多数人都可能比较熟悉的VMware系列产品,比如常用VMware Workstation Pro 、VMware esxi。 而今天我带大家一起认识一款我们国产的虚拟化软件 H3C CAS。
1779 0
|
7月前
|
算法 调度 数据安全/隐私保护
什么是CAS锁
什么是CAS锁
90 0
|
7月前
|
Java API
CAS的超~详细介绍
CAS的超~详细介绍
|
7月前
|
存储 算法 Java
|
7月前
|
算法
原子操作CAS
原子操作CAS
44 0
|
7月前
|
缓存 Linux API
原子操作CAS与锁实现
原子操作CAS与锁实现
|
7月前
|
存储 缓存 算法
理解原子操作与CAS锁
理解原子操作与CAS锁
85 0
|
7月前
|
算法 Java 关系型数据库
CAS
本文主要讲解java中cas的概念及原理
68 0