我是 Linux 新手,正在学习 RCU 部分。我看到操作期间有一个宽限期。只是想知道如果有新的作者想在宽限期内更新数据,可能吗?我想有两种方法:
在宽限期内,它带有写锁
RCU 可以在 RCU 上工作,这意味着它在旧 RCU 上创建新 RCU,等待新 RCU 完成,然后旧 RCU 进入宽限期结束。
哪种方式对于 Linux 来说是正确的?
最佳答案
Just want to know if some new writer want to update the data during grace period, is it possible?
是的,这是可能的。作者不必等待宽限期结束。此外,宽限期对于回收阶段也很重要(简单来说,删除后,我们正在等待访问数据(在我们删除之前)的读者完成使用它并退出关键部分,例如通过 rcu_read_unlock()
,然后我们可以释放它)。
除了RCU 支持单个更新程序和多个读取程序之间的并发这一事实之外,这并不是 RCU 的问题。因此,如果您有多个更新程序,则应应用适当的锁定。
RCU 通常与自旋锁一起使用来解决更新程序之间的并发问题。因此,您可以在 Linux 内核源代码中看到一些使用 RCU 与多个更新程序的清晰示例。
有用的链接:
- What is RCU? -- "Read, Copy, Update" (带有附加链接和简单示例用途的综合论文)
- A Tour Through RCU's Requirements
关于linux-kernel - 对于Linux RCU,在宽限期内,新的写入者是否有可能更新新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45450511/