Day 24 CAS

2022-04-04  本文已影响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问题:

  public final boolean compareAndSet(int expect, int update) {
        return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    }

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

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

Screen Shot 2022-04-04 at 11.12.25 PM.png
上一篇 下一篇

猜你喜欢

热点阅读