CAS(compare and swap)

2025/04/03

一、背景

为什么要有CAS,它解决了什么问题

  1. 解决锁机制的性能问题
  2. 用于无锁并发编程

无锁表现在: CAS 通过硬件指令(如 CPU 的 cmpxchg)直接实现原子操作,线程不会阻塞,而是通过不断重试(自旋)直到成功。

避免死锁,因为根本没有锁。

二、和传统锁的对比

一个例子i++

三、实际的使用

img.png

四、存在的问题

什么是ABA问题

如果值的变化过程如下所示

  1. A -> B
  2. B -> A

CAS检查时发现没有变,因为起始和结束时值没有发生变化,就去更新,但是在上面两步过程中值其实已经发生了变化。

解决方案: 添加版本号或时间戳的校验

开销问题

长时间自旋不成功,有开销问题。