首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rcu_dereference()对rcu_dereference_protected()?

rcu_dereference()对rcu_dereference_protected()?
EN

Stack Overflow用户
提问于 2016-08-31 13:40:49
回答 1查看 2.6K关注 0票数 1

有谁能解释一下rcu_dereference()rcu_dereference_protected()之间的区别?

rcu_dereference()包含障碍代码,而rcu_dereference_protected()不包含。

何时使用rcu_dereference(),何时使用rcu_dereference_protected()

EN

回答 1

Stack Overflow用户

发布于 2016-08-31 19:39:06

简言之:

  • rcu_dereference()应在受rcu_read_lock()或类似保护的读取端中使用.
  • rcu_dereference_protected()应由单个写入器在写端中使用,或者由锁保护,以防止多个写入器并发修改取消引用的指针。在这种情况下,指针不能在当前线程之外进行修改,因此不需要编译器--也不需要cpu--屏障。

如果有疑问的话,使用rcu_dereference总是安全的,它的性能惩罚(与rcu_dereference_protected相比)很低。

描述用于内核4.6中的rcu_dereference_protected

代码语言:javascript
复制
/**
 * rcu_dereference_protected() - fetch RCU pointer when updates prevented
 * @p: The pointer to read, prior to dereferencing
 * @c: The conditions under which the dereference will take place
 *
 * Return the value of the specified RCU-protected pointer, but omit
 * both the smp_read_barrier_depends() and the READ_ONCE().  This
 * is useful in cases where update-side locks prevent the value of the
 * pointer from changing.  Please note that this primitive does -not-
 * prevent the compiler from repeating this reference or combining it
 * with other references, so it should not be used without protection
 * of appropriate locks.
 *
 * This function is only for update-side use.  Using this function
 * when protected only by rcu_read_lock() will result in infrequent
 * but very ugly failures.
 */
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39251287

复制
相关文章

相似问题

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