免费注册 查看新帖 |

Chinaunix

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

RCU lock的两个疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-27 10:48 |只看该作者 |倒序浏览
最近要使用RCU,看了一下实现后,有如下几个疑惑
1   内核文档说 读者使用rcu_dereference,一定要在RCU read-side critical section, 也就是需要rcu_read_lock()保护。
  当然如果写者有reclaim的动作,这个是必然,但如果写者只有update的动作呢,也就是只rcu_assign_pointer(),那读者还需要保护吗?
  我感觉并不需要了,因为rcu_assign_pointer()和rcu_dereference都是原子操作啊。
2  感觉RCU一般用在读者会被写者抢占的时候,但如果写者也会抢占读者,那写者和读者之间还需要什么同步吗?

论坛徽章:
0
2 [报告]
发表于 2011-12-27 12:41 |只看该作者
rcu 锁是  单写者和多读者可以并行。  原因: 写者修改链表指针的时候按照一定的顺序来操作,不会造成读者断链之类的。但会数据不一致,如果能容忍的话。

多个写者并行是不可以的。   

论坛徽章:
0
3 [报告]
发表于 2011-12-27 13:30 |只看该作者
没错,读者和写者是不需要同步的。读者仅仅是使用一个原子操作 对一个指针进行读,要么读到写者更新前的旧值,从而引用到旧的对象、要么读到更新后的新值,从而引用到新的对象,不会出现中间状态。

为什么要使用rcu_XXX那一套接口? 因为rcu的核心问题是:指向对象的指针修改之后,旧的对象何时释放?读者和写者按照rcu_XXX那一套接口的规范来操作,可以保证旧对象在再也没人引用到它的时候被释放掉。

之前写过一篇blog,有兴趣可以参考一下:http://hi.baidu.com/_kouu/blog/item/c9099983724545ad0df4d225.html

论坛徽章:
0
4 [报告]
发表于 2011-12-28 22:55 |只看该作者
rcu_read_lock的时候,会关抢占。写锁可能删除节点,节点释放是按批次来的,    等所有的核都上下文切换一次的时候,释放一批次, 这个你知道 rcu_read_lock的时候关抢占就理解了。

论坛徽章:
0
5 [报告]
发表于 2011-12-28 22:56 |只看该作者
rcu_read_lock的时候,会关抢占。写锁可能删除节点,节点释放是按批次来的,    等所有的核都上下文切换一次的时候,该节点肯定不会被读者使用了,释放一批次, 这个你知道 rcu_read_lock的时候关抢占就理解了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP