CAS算法

作者: 秦老厮 | 来源:发表于2019-08-23 22:54 被阅读5次

前言

CAS,即 Compare And Swap(比较与交换),是一种无锁算法,基于硬件原语实现,能够在不使用锁的情况下实现多线程之间的变量同步。jdk中的java.util.concurrent.atomic包中的原子类就是通过CAS来实现了乐观锁。

CAS算法过程

算法涉及到三个操作数:

  • 需要读写的内存位置V
  • 需要进行比较的预期值A
  • 需要写入的新值U

CAS算法解析:

CAS具体执行时,当且仅当预期值A符合内存地址V中存储的值时,就用新值U替换掉旧值,并写入到内存地址V中。否则不做更新。

CAS算法的运行原理如下如所示:

CAS算法图解

CAS会有如下三个方面的问题:

1.ABA问题,一个线程将内存值从A改为B,另一个线程又从B改回到A。

2.循环时间长开销大:CAS算法需要不断地自旋来读取最新的内存值,长时间读取不到就会造成不必要的CPU开销。

  1. 只能保证一个共享变量的原子操作(jdk的AtomicReference来保证应用对象之间的原子性,可以把多个变量放在一个对象里来进行CAS操作,解决了这一问题)。

ABA问题图解:

ABA问题图解

ABA问题解决方案:在变量前面添加版本号,每次变量更新的时候都将版本号加1,比如juc的原子包中的AtomicStampedReference类。

相关文章

  • 最简单的CAS机制说明

    CAS(Compare-And-Swap) 算法保证数据变量的原子性 CAS 算法是硬件对于并发操作的支持 CAS...

  • CAS(乐观锁)

    CAS乐观锁 CAS算法即是:Compare And Swap,比较并且替换CAS算法存在着三个参数,内存值V,旧...

  • 粒子群优化算法(PSO)基础

    粒子群算法 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS)。CAS理论于19...

  • 深入理解自旋锁

    本文出自:http://blog.onlycatch.com/post/自旋锁 简单回顾一下CAS算法 CAS算法...

  • 自旋锁

    简单回顾一下CAS算法 CAS算法即compare and swap(比较与交换),是一种有名的无锁算法。无锁编程...

  • CAS机制

    CAS(Compare-And-Swap)算法保证数据操作的原子性。 CAS 算法是硬件对于并发操作共享数据的支持...

  • CAS算法和ABA问题

    CAS算法 CAS(Compare And Swap)比较并交换,它是一种算法,体现的是乐观锁的思想,总是认为自己...

  • 【java并发编程实战2】无锁编程CAS与atomic包

    1、无锁编程CAS 1.1、CAS CAS的全称是Compare And Swap 即比较交换,其算法核心思想如下...

  • android 多线程 — CAS 算法 + 原子性操作类

    CAS 也叫无锁算法(Compare and Swap),核心思想是:当多个线程尝试使用 CAS算法同时更新同一个...

  • Java并发基础

    volatile, CAS 非阻塞算法,Treiber 非阻塞算法,Unsafe Volatile volatil...

网友评论

    本文标题:CAS算法

    本文链接:https://www.haomeiwen.com/subject/wrbxectx.html