美文网首页
并发编程中的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

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