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