我将 RCU 保护的指针存储MyStruct *
在 RCU 保护的哈希表MyHash
中。通过哈希表读取/更新MyStruct
时,我执行如下所示。
rcu_read_lock() /* For hashtable 'MyHash' */
hash_for_each_possible_rcu(MyHash, obj, member, key)
{
rcu_read_lock(); /* For RCU protected data(MyStruct*) stored in hashtable */
Mystruct* s = rcu_dereference_pointer(obj->s);
if(s)
{
s->read++;
}
rcu_read_unlock(); /* For RCU protected data(MyStruct*) stored in hashtable */
}
rcu_read_unlock() /* For hashtable 'MyHash'*/
请注意,MyStruct
它本身是另一个 RCU 保护列表的一部分(即,它是另一个列表的 RCU 保护节点),它存储在其中MyHash
以便更快地查找。
据我了解,rcu_read_lock
需要 ' 以确保在所有读取端关键部分完成之前,任何写入器更新都不会释放内存。那么,真的有必要嵌套rcu_read_lock
's 还是仅仅拥有外部rcu_read_lock
/rcu_read_unlock
就足够了?
IOW,由于 RCU 锁不绑定到任何单个对象,当一起访问多个 RCU 受保护对象时,我们真的需要嵌套的 rcu 锁吗?