linux-kernel - 对于Linux RCU,在宽限期内,新的写入者是否有可能更新新数据?

标签 linux-kernel lock-free mutual-exclusion rcu

我是 Linux 新手,正在学习 RCU 部分。我看到操作期间有一个宽限期。只是想知道如果有新的作者想在宽限期内更新数据,可能吗?我想有两种方法:

  1. 在宽限期内,它带有写锁

  2. 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 与多个更新程序的清晰示例。

有用的链接:

关于linux-kernel - 对于Linux RCU,在宽限期内,新的写入者是否有可能更新新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45450511/

相关文章:

Linux 内核 IIO 事件 sysfs 文件只可读

c++ - 将数据从一个线程传递到另一个线程的最快方法

Python:如何使用argparse在子解析器中具有互斥组?

python - argparse 和互斥组,每个组都有自己需要的设置

linux - 在进程栈中有 thread_struct 的意义

c - 相当于ping的网络设备模块

c++ - 具有可变长度写入的多生产者多消费者无锁非阻塞环形缓冲区

algorithm - MPI:确保独占访问共享内存 (RMA)

c - get_cpu_var、put_cpu_var 不更新每个 CPU 变量

c++ - (最好是提升)无锁数组/vector/ map /等?