形式陈述
比较并交换 CAS 对共享位置
直觉
线程先假设共享状态仍是自己观察到的旧值;只有假设未被其他线程破坏时才提交更新。
例子与边界
无锁计数器反复读取旧值并 CAS 到旧值加一,失败则重试。ABA 问题中值从 A 变 B 又回 A,CAS 无法察觉中间变化,可用版本标签或安全回收缓解。CAS lock-free 算法不自动 wait-free,个别线程可能一直失败。
推论与应用
CAS 是无锁栈、队列、原子引用、一次初始化和多数现代同步库的核心硬件原语。
参考资料
- Maurice Herlihy and Nir Shavit, The Art of Multiprocessor Programming, rev. 1st ed., Morgan Kaufmann, 2012,Chs. 1–18。
- Hagit Attiya and Jennifer Welch, Distributed Computing: Fundamentals, Simulations, and Advanced Topics, 2nd ed., Wiley, 2004,Chs. 1–18。