自旋 CAS(Compare-And-Swap)
1. 什么是自旋 CAS?
- CAS:Compare-And-Swap,是一种无锁编程技术,通过硬件指令实现原子操作。
- 自旋:线程在尝试获取锁时,不会立即阻塞,而是通过循环不断尝试,直到成功。
2. CAS 的核心思想
-
比较并交换:CAS 操作包含三个操作数:
- 内存位置(V)
- 预期值(A)
- 新值(B)
-
操作过程:
- 比较内存位置的值与预期值。
- 如果相等,则将内存位置的值更新为新值。
- 如果不相等,则操作失败。
3. 自旋 CAS 的实现
public class SpinLock {
private AtomicReference<Thread> owner = new AtomicReference<>();
public void lock() {
Thread current = Thread.currentThread();
// 自旋等待
while (!owner.compareAndSet(null, current)) {
// 空循环
}
}
public void unlock() {
Thread current = Thread.currentThread();
owner.compareAndSet(current, null);
}
}
通俗解释:
- 自旋 CAS 就像是一个“抢凳子游戏”,线程不断尝试抢到凳子(锁),如果抢不到就一直转圈(自旋),直到成功。