Chinaunix
标题:
关于rcu链表的应用条件疑问
[打印本页]
作者:
wLiu2007
时间:
2014-08-19 15:58
标题:
关于rcu链表的应用条件疑问
本帖最后由 wLiu2007 于 2014-08-19 16:52 编辑
今天在看rcu的东西,大致了解了其思想,感觉其应用条件比较苛刻,比如读者在通过rcu遍历链表时,在循环体内只能操作当前这个节点,不允许操作当前节点的prev和next,因为这个时候可能写者已经更改了链表的结构,伪代码如下:
rcu_read_lock();
list_for_each_entry_rcu(pos, head, member)
{
操作pos;
pos->next;
pos->prev;
}
rcu_read_unlock();
在这个{}循环体里面就只能针对pos节点数据做操作,访问pos->next和pos->prev都是有风险的,
所以rcu链表比较适合那种链表上挂的节点之间比较独立的,不适合节点之间有关联性(比如处理当前节点需要前后节点里面的信息)
在大循环里面,rcu只能保证:
1,pos的节点对应的内存不会被回收(pos仍然可以用);
2,正向遍历可以持续,即通过pos仍然可以找到下一个节(pos->next有效);
但是不能保证:
1,不保证通过pos找到的下一个节点和刚进入循环体时的节点是同一个节点(不保证pos->next不变);
2,不能保证pos->prev有效,如果访问pos->prev就会出错;
不知道理解是否正确?
作者:
Tinnal
时间:
2014-08-20 09:16
回复
1#
wLiu2007
你可以先看看:
http://www.ibm.com/developerworks/cn/linux/l-rcu/
还有内核的documentation/rcu/listRCU.txt文档。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2