自旋CAS,底层原理和代码案例分享

192 阅读1分钟

自旋 CAS(Compare-And-Swap)

1. 什么是自旋 CAS?

  • CAS:Compare-And-Swap,是一种无锁编程技术,通过硬件指令实现原子操作。
  • 自旋:线程在尝试获取锁时,不会立即阻塞,而是通过循环不断尝试,直到成功。

2. CAS 的核心思想

  • 比较并交换:CAS 操作包含三个操作数:

    • 内存位置(V)
    • 预期值(A)
    • 新值(B)
  • 操作过程

    1. 比较内存位置的值与预期值。
    2. 如果相等,则将内存位置的值更新为新值。
    3. 如果不相等,则操作失败。

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 就像是一个“抢凳子游戏”,线程不断尝试抢到凳子(锁),如果抢不到就一直转圈(自旋),直到成功。