Skip to content

读改写原语

Read-modify-write operation · RMW

在单个原子步骤中读取旧值、计算并写入新值的共享内存操作。

形式陈述

读改写原语原子地读取位置旧值,依据旧值计算并写回新值,同时返回旧值或成功标志。典型实例包括 test-and-set、fetch-and-add、swap 和 compare-and-swap。不同原语的共识数和可实现对象能力不同;“RMW”是类别,不是单一语义。内存序参数还决定跨位置的可见顺序。

直觉

把“查看当前值并据此更新”合成一个不可插入的动作,避免另一个线程在读写之间抢先修改。

例子与边界

原子 fetch_add(x,1) 可为每个线程返回不同旧值,构造计数器。用普通读后普通写实现同一代码会丢失更新。RMW 可能反复失败或争用,原子性不保证公平;在 ABA 场景中 CAS 看到值恢复相同却忽略中间变化。

推论与应用

RMW 原语用于自旋锁、无锁栈、工作队列、版本计数和共享内存同步下界。

参考资料
  • 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。