免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1169 | 回复: 1
打印 上一主题 下一主题

[内核入门] 关于rcu链表的应用条件疑问 [复制链接]

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-19 15:58 |只看该作者 |倒序浏览
本帖最后由 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就会出错;

不知道理解是否正确?

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
2 [报告]
发表于 2014-08-20 09:16 |只看该作者
回复 1# wLiu2007


你可以先看看:
http://www.ibm.com/developerworks/cn/linux/l-rcu/
还有内核的documentation/rcu/listRCU.txt文档。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP