美文网首页
Day 24 CAS

Day 24 CAS

作者: 小周爱吃瓜 | 来源:发表于2022-04-04 23:35 被阅读0次

CAS是种思想,比较和交换,用于并发度不高的场景,因为大部分情况下没有竞争,或者竞争不大,直接用synchronized会设计上下文切换,时间片轮转,2w个时间单位,所以我们不妨让线程做下自旋,以稍许的cpu的代价去抵消这部分的消耗.

CAS 有 比较和交换的意思,当前处理器基本上都支持CAS操作,只不过各家实现的算法不一样罢了。
其包含三个步骤:一个内存地址V , 期望值A和新值B.
操作的时候如果是A,那么就将内存地址的值指向B.

CAS不适合竞争大的场景.


Screen Shot 2022-04-04 at 11.01.07 PM.png

CAS实现的ABA问题:

  • 劣势:
    只能针对一个共享变量才能执行该操作,如果是多个就无法执行。

  • Atomic的实现

  public final boolean compareAndSet(int expect, int update) {
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }
  • CAS的第二个问题

ABA, 无法知道途中可能有的更改,需要带上版本号去记录过程的变更.

  • 底层支持是unsafe类
    unsafe的实现由hotspot虚拟机对其进行支持.


    Screen Shot 2022-04-04 at 11.10.34 PM.png

所以cas是硬件层面的指令.

  • AtomicStampReference 也提供了相应的支持. 可以记录每一次的版本号,在构造函数中指定.
Screen Shot 2022-04-04 at 11.12.25 PM.png

相关文章

网友评论

      本文标题:Day 24 CAS

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