有谁能解释一下rcu_dereference()和rcu_dereference_protected()之间的区别?
rcu_dereference()包含障碍代码,而rcu_dereference_protected()不包含。
何时使用rcu_dereference(),何时使用rcu_dereference_protected()
发布于 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:
/**
* 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.
*/https://stackoverflow.com/questions/39251287
复制相似问题