美文网首页
并发编程中的CAS

并发编程中的CAS

作者: qwerdf0929 | 来源:发表于2021-12-27 15:58 被阅读0次

定义

博客链接1
多线程并发环境下,有两种更新共享变量的方式: 1)悲观锁 2)乐观锁

  • 悲观锁
    线程访问同步代码块之前加锁,访问完成再释放。其他线程如果也访问,从runable状态变为blocked状态,等待线程结束再进入就绪状态等待操作系统调度。
  • 乐观锁
    线程访问共享变量时,从主内存中拷贝数据到工作内存,更新操作修改将计算后的值再更新到主内存中。CAS(compare and set):在更新操作前,比较工作内存中未处理之前的值 与 主内存目前的值 是否相同,如果相同直接更新,如果不相同则重新加载->计算->保存。CAS机制中的这步步骤是原子性的(从指令层面提供的原子操作)

优缺点

优点

  • 可以保证变量操作的原子性
  • 在线程占用共享变量时间短时,效率高
  • 在并发量不大的情况下,比syschronized效率高

缺点

  • ABA问题:虽然值相同但被修改过,通过使用Pair类,加入版本号
  • 在线程之间竞争程度大的时候,如果使用CAS,每次都有很多的线程在竞争,也就是说CAS机制不能更新成功。这种情况下CAS机制会一直重试,这样就会比较耗费CPU。因此可以看出,如果线程之间竞争程度小,使用CAS是一个很好的选择;但是如果竞争很大,使用锁可能是个更好的选择。
  • 不能保证共享代码块的原子性

相关文章

  • 并发编程-CAS

    Java并发编程中,除了通过synchronized进行并发控制外,还可以通过CAS(Compare And Se...

  • 并发编程中的CAS

    定义 博客链接1[https://www.cnblogs.com/54chensongxia/p/12160085...

  • CAS乐观锁

    什么是CAS CAS比较并替换,是一种并发编程中用到的一种技术。 CAS是原子性,保证并发安全,而不是保证并发同步...

  • JAVA并发编程学习笔记之CAS操作

    JAVA并发编程学习笔记之CAS操作 CAS操作 CAS是单词compare and set的缩写,意思是指在se...

  • Java并发编程

    一、Java并发编程的挑战 1.1 如何减少上下文切换? 无锁并发编程: CAS算法:Java的Atomic包使用...

  • (转载)Java并发编程-并发包中的原子操作类(Atomic系列

    原文链接:Java并发编程-无锁CAS与Unsafe类及其并发包Atomic - CSDN博客 通过前面的分析我们...

  • 并发编程之CAS

    写在前面 上一篇我们分析了volatile变量对于内存可见性的保证以及抑制指令重排的特性,了解到在多线程对vola...

  • 并发编程(七)CAS

    1.CAS 在AQS的加锁和释放锁阶段,多次使用了一种通用操作:compareAndSetXXX.这种操作最终会调...

  • 并发编程 CAS(一)

    一谈到并发编程,就会遇到各种概念,为什么会这么多概念呢,因为并发编程中的东西,是更贴近底层的东西,而底层很多都是j...

  • java并发编程-CAS

    CAS简介 CAS英文名称为Compare-And-Swap,中文叫做“比较并交换”,它是一种思想、一种算法。在多...

网友评论

      本文标题:并发编程中的CAS

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