加载中...

CAS(Compare-And-Swap,比较并交换)是一种由 CPU 提供的原子指令:给定内存地址、期望值和新值,仅当地址中的当前值等于期望值时才将其替换为新值,并返回操作是否成功,整个过程不可被打断。
CAS 体现乐观并发思想:线程不加锁直接尝试更新,失败则说明有竞争,重读最新值后循环重试(自旋)。相比互斥锁,它避免了线程挂起与上下文切换,在竞争不激烈时性能优异。
CAS 是无锁(lock-free)数据结构的基石:原子计数器、无锁队列、自旋锁的实现都依赖它。Java 的 java.util.concurrent 原子类、C++ 的 std::atomic、数据库与分布式系统中的乐观锁(版本号比较后更新)都是同一思想的体现。
典型问题包括:ABA 问题——值从 A 变 B 又变回 A,CAS 无法察觉,需引入版本号(如带标记的指针)解决;高竞争下自旋空转浪费 CPU;一次只能原子更新一个字,复合操作仍需其他手段配合。

登录 后参与讨论
暂无讨论,来发表第一条评论吧