首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当synchronize_rcu()等待时,RCU如何处理读取器的条件开始读取关键部分

当synchronize_rcu()等待时,RCU如何处理读取器的条件开始读取关键部分
EN

Stack Overflow用户
提问于 2020-02-07 09:07:57
回答 1查看 312关注 0票数 0

根据RCU文档(我相信内核和用户空间RCU框架是相似的),synchronize_rcu()等待所有读者(在调用synchronize_rcu之前开始)完成。

synchronize_rcu()处于宽限期等待之后,启动的读者会发生什么?

synchronize_rcu()返回后启动的读取器与在synchronize_rcu()等待时启动的读取器之间有什么区别?RCU框架如何处理这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-07 16:02:49

新读取器(在synchronize_rcu()在宽限期等待之后开始在关键部分执行)读取新的数据结构?

rcu_assign_pointer()读取新的数据结构后,所有进入关键部分的读者。

在synchronize_rcu()返回之后启动的读取器和在synchronize_rcu()等待时启动的读取器之间有什么区别?

您所谈论的一切取决于是否/何时分配了新指针。分配和阅读是相关的事情。

Linux上的synchronize_rcu()通常等待到所有CPU都进行上下文切换--它保证没有人看到旧指针不再使用它(在读取器出口它们的关键部分之后发生上下文切换)--所以我们可以释放这个内存。来自这个职位

..if一个给定的CPU执行一个上下文切换,我们知道它必须已经完成了前面所有的RCU读取端关键部分。一旦所有CPU都执行了上下文切换,那么前面所有的RCU读取端关键部分都将完成。 因此,假设我们从它的结构中删除一个数据项,然后调用synchronize_rcu()。一旦synchronize_rcu()返回,我们就可以保证没有RCU读取端关键部分保存对该数据项的引用,这样我们就可以安全地回收它。

新的读者对旧的数据结构一无所知。指针的“交换”是原子的。

再一次:synchronize_rcu()对读取器没有影响-它只是保证在它返回之后,我们可以释放指针指向的内存(kfree())。

您似乎还没有了解Linux的基础知识。

必须改为:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60110278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档