【发布时间】:2015-08-27 22:25:08
【问题描述】:
(来自LWN的一篇文章)
1 rcu_read_lock();
2 list_for_each_entry_rcu(p, head, list) {
3 do_something_with(p->a, p->b, p->c);
4 }
5 rcu_read_unlock();
RCU 更新操作将执行 synchronize_rcu() 以断言每个 CPU 切换了上下文,因此每个 RCU 读取器都完成了它的工作。但是 RCU 必须依赖于 reader 不被抢占。确实,LWN 接下来说:
虽然这种简单的方法适用于抢占的内核 跨 RCU 读取端临界区禁用,换句话说,对于 非 CONFIG_PREEMPT 和 CONFIG_PREEMPT 内核,它不适用于 CONFIG_PREEMPT_RT 实时 (-rt) 内核。
我知道非 CONFIG_PREEMPT 内核禁用了抢占,但为什么 CONFIG_PREEMPT 内核也可以?
【问题讨论】:
标签: c algorithm linux-kernel preemption rcu