目录
一.什么是CAS
CAS(Compare And Swap,比较并交换),通常指的是这样一种原子操作:针对一个变量,首先比较它的内存值与某个期望值是否相同,如果相同,就给它赋一个新值。
- CAS是一个不可分割的原子操作,并且其原子性是直接在硬件层面得到保障的。
- CAS是乐观锁的一种实现方式,Java原子类中的递增操作就通过CAS自旋实现的。
- CAS是一种无锁算法,在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。
二.流程
三.缺点
CAS 虽然高效地解决了原子操作,但是还是存在一些缺陷的,主要表现在三个方面:
- 自旋 CAS 长时间地不成功,则会给 CPU 带来非常大的开销
- 只能保证一个共享变量原子操作
- ABA 问题
四.ABA 问题
CAS算法实现一个重要前提需要取出内存中某时刻的数