cas介绍

CAS的底层是lock cmpxchg 指令(X86架构),在单核CPU和多核CPU下都能保证【比较-交换】的原子性。

  • 在多核状态下,某个核执行到带lock的指令时,CPU会让总线锁住,当这个核把此指令执行完毕,再开启总线。这个过程中不会被线程的调度机制所打断,保证了多个线程对内存操作的准确性,是原子的。

CAS必须借助volatile才能读取到共享变量的最新值来实现【比较并交换】的效果。

结合CAS和volatile可以实现无锁并发,适用于线程数少、多核CPU的场景下。

  • CAS是基于乐观锁思想:最乐观的估计,不怕别的线程来修改共享变量,就算改了也没关系,吃亏点在重试。
  • synchronized 是基于悲观锁的思想:最悲观的估计,得防着其它线程来修改共享变量,我上了锁你们都别想改,我改完了解开锁,你们才有机会。
  • CAS体现的是无锁并发、无阻塞并发
    • 因为没有使用synchronized,所以线程不会陷入阻塞,这是提升效率的因素之一
    • 但如果竞争激烈,可以想到重试必然频繁发生,反而效率会受影响
posted @ 2022-03-13 15:25  fjhnb  阅读(135)  评论(0)    收藏  举报