Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 为什么列表“U添加”“U rcu仅保护”;上一页->;下一个;?_Linux Kernel_Locking_Rcu - Fatal编程技术网

Linux kernel 为什么列表“U添加”“U rcu仅保护”;上一页->;下一个;?

Linux kernel 为什么列表“U添加”“U rcu仅保护”;上一页->;下一个;?,linux-kernel,locking,rcu,Linux Kernel,Locking,Rcu,以下是中的\u列表\u添加\u rcu的实现: static inline void\uuuu list\u add\u rcu(结构列表\u head*new, 结构列表头*上一个,结构列表头*下一个) { 新建->下一步=下一步; 新建->上一个=上一个; rcu\u分配\u指针(列出下一个\u rcu(上一个),新); 下一步->上一步=新建; } 在功能体内部,rcu锁保护prev->next的更新,但不保护next->prev。为什么?我错过了任何明显的东西吗?RCU lock无法保

以下是中的
\u列表\u添加\u rcu
的实现:

static inline void\uuuu list\u add\u rcu(结构列表\u head*new,
结构列表头*上一个,结构列表头*下一个)
{
新建->下一步=下一步;
新建->上一个=上一个;
rcu\u分配\u指针(列出下一个\u rcu(上一个),新);
下一步->上一步=新建;
}

在功能体内部,rcu锁保护
prev->next
的更新,但不保护
next->prev
。为什么?我错过了任何明显的东西吗?

RCU lock无法保证在两个方向上遍历列表的正确性

简而言之,这样的担保人需要同时“保护”两个指针(
next->prev
prev->next
)。但是
RCU节不是独占节,因此两个指针之间的值可能不一致

正因为如此,RCU只保证前向列表遍历的正确性。为此,只需保护
prev->next

提示:虽然存在用于反向列表遍历的宏(例如每个条目的反向列表),但这些宏没有RCU对应项。这只是因为RCU不支持这种遍历类型