RCU 读复制更新Read-copy update

把共享对象的移除与回收分离,让读者在规定临界区内安全访问,回收等待宽限期。

核心约束
旧对象必须保留到可能观察到它的既有读侧临界区结束;发布与回收须遵守相应内存序和 API 规则。
适用问题
读多写少的索引、共享对象发布与生命周期管理。
边界与取舍
RCU 不自动序列化写者,也不保证可变字段快照;跨读区持有对象常需引用计数等机制。
publish newgrace periodreclaim old
替换或摘除后,等待更新前的读者离开读区。若对象还有引用计数等所有者,仍需满足其额外释放条件。

常见操作#

R 为待回收对象集合;读侧成本依 RCU 变体、内核配置与执行上下文而变。

操作时间成本条件与说明
进入 / 退出读侧临界区由 RCU 变体决定某些上下文只需很少指令;SRCU 等方案会维护额外计数,不能统一断言零成本。
发布替代对象构建对象 + 有序发布更新者仍需适当序列化;RCU 不自动解决多个写者的数据竞争。
等待宽限期并回收由既有读者退出和回收调度决定不是一个以容器元素数为变量的固定 O(1)O(1) 延迟。回调可以异步排队。

时间与空间#

时间成本
读侧、更新、宽限期和回收分别分析
空间成本
当前对象 + 尚未回收的旧对象及回调

RCU 主要保证读侧遍历期间的对象生命周期。退出读侧后继续保留指针,需要引用计数或其他生命周期协议。

工程中的应用#

2 个案例 · 附源码
基础原理参考资料

Linux 6.12 · What is RCU?移除、宽限期、延迟回收和读复制更新 API 的边界。

3 个概念