CAS——比较并交换

1.CAS是什么?

  Compare And Swap,比较并交换,它是一条CPU并发原语。功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。

  调用Unsafe类中的CAS方法,JVM会帮我们实现出CAS的汇编指令,这是依赖与硬件的功能实现的原子操作。CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成,用于完成某个功能的一个过程,并且原语的执行必须是连续的,执行过程中不允许被中断,也就是说CAS是一条CPU的原子指令,不会造成数据不一致问题

2.CAS底层原理?

  自旋锁,Unsafe类

atomicInteger.getAndIncrement()的源码:

CAS——比较并交换

 unsafe.getAndAddInt()方法的源码:

CAS——比较并交换

 3.AtomicInteger为什么要用CAS而不是synchronized?

  synchronized加锁,同一时间段只允许有一个线程能访问,一致性得到了保障,但是并发性下降;CAS反复进行比较,直到比较成功,这样既保证了一致性,又提高了并发性

4.CAS的缺点?

  如果循环时间长,开销很大

  只能保障一个共享变量的原子操作

  ABA问题

5.如何解决ABA问题?

  AtomicStampedReference,带时间戳的原子引用

CAS——比较并交换

上一篇:Software Testing(软件测试)介绍篇


下一篇:【题解】CF570D Tree Requests