免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zylthinking
打印 上一主题 下一主题

[CPU及多核] spin_lock 能否起到内存屏障作用? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2014-06-01 21:24 |显示全部楼层
本帖最后由 yiifburj 于 2014-06-01 21:26 编辑

linux内核文档 Documentation/memory-barriers.txt

锁暗含内存屏障, 和 smp_rmb smp_wmb不同
lock     //lock之后的内存操作一定在lock之后开始,lock之前的内存操作可能在lock之后提交或完成

unlock  //unlock之前的内存操作要在unlock之前完成,unlock之后的内存操作可能在unlock之前提交或完成

unlock 后面带一个 lock 相当于完全内存屏障的作用。smp_mb
lock  code unlock 相当于限制code中的内存操作在lock后开始,unlock前完成,副作用,lock之前的内存操作在unlock之前一定会完成,只能越过lock不会越过unlock, unlock之后的内存操作一定在lock之后完成,只能越过unlock不能越过lock

所以对于锁保护的区间, 不需要内存屏障。
以上仅是个人理解,不保证正确性,内核文档可以好好读读。

我们公司的同事基本都是加锁,很少有人研究内存屏障, 实践表明应该是没有问题的, 忘记加锁,倒是出现过问题,就是一个添加链表,另一个恰好遍历到那个地方, 如果加了内存屏障,不加锁也不会出问题。不过这也是小概率时间,很不容易遇到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP