形式陈述
原子操作在抽象历史中不可分割地从一个状态转到另一个状态,其他线程不能观察其中间状态。硬件指令的“原子”还可能涉及内存排序、宽度、对齐和故障语义;原子性本身不保证复合操作的线性一致性。一个操作可由多条指令实现,却在高层证明中具有单一线性化点。
直觉
对观察者而言,操作要么尚未发生,要么已经全部发生,不存在只完成一半的可见时刻。
例子与边界
原子读写寄存器不会产生撕裂值,但“先读再条件写”若分成两个原子操作仍存在竞态。数据库事务的原子性与 CPU 原子指令相关但不相同。原子操作也不自动提供顺序一致性;弱内存模型还需 acquire/release 等排序。
推论与应用
原子操作构成锁、无锁数据结构、引用计数和并发同步的底层原语。
参考资料
- 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。