(来自关于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-reader 都完成了它的工作。但是 RCU 必须依赖于 reader 不被抢占。事实上,LWN 接下来说:
尽管这种简单的方法适用于跨 RCU 读取端临界区禁用抢占的内核,换句话说,对于非 CONFIG_PREEMPT 和 CONFIG_PREEMPT 内核,它不适用于 CONFIG_PREEMPT_RT 实时 (-rt) 内核。
我知道非 CONFIG_PREEMPT 内核禁用了抢占,但为什么CONFIG_PREEMPT内核也可以?