免费注册 查看新帖 |

Chinaunix

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

[C] 共享内存的原子操作LOCK前缀 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-05 12:49 |只看该作者 |倒序浏览
共享内存的原子操作,是否只需在汇编指令前加上LOCK前缀就OK了?缓存一致性有没有问题?
  1. #atomic int a,b;

  2. int main()
  3. {
  4.         a+=1;
  5.         b-=1;
  6. }
复制代码
  1. section .code align=4
  2. bits 32
  3. _main:
  4. push    ebp
  5. mov     ebp, esp
  6. lock    add     [ _a ], dword 0x1
  7. lock    sub     [ _b ], dword 0x1
  8. mov     esp, ebp
  9. pop     ebp
  10. ret
复制代码

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
2 [报告]
发表于 2013-01-08 17:28 |只看该作者
lock是用来锁总线的.
如果数据在cache line中,这个lock就没有任何用;否则cpu会锁住总线然后load到cache里面去

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
3 [报告]
发表于 2013-01-08 21:32 |只看该作者
加lock即可。

论坛徽章:
0
4 [报告]
发表于 2013-01-09 07:58 |只看该作者
回复 2# egmkang
根据手册,处理器会自动锁缓存或者LOCK#共享内存区。只要不会#UD就可以了。

   

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
5 [报告]
发表于 2013-01-09 09:05 |只看该作者
事实上我也没想明白,对于非对齐访问加lock是什么行为!!!

论坛徽章:
0
6 [报告]
发表于 2013-01-09 17:24 |只看该作者
READ MODIFY WRITE操作是会分解为2次存取内存的操作,在并发环境中这2次操作中有可能不是连贯的。所以要加锁,这个应该不关是否对齐的问题。

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
7 [报告]
发表于 2013-01-09 17:49 |只看该作者
我就说我无法理解么,专门查了一下,对于lock前缀的指令,访问的memroy必须满足对齐的要求。

论坛徽章:
0
8 [报告]
发表于 2013-01-09 20:13 |只看该作者
The integrity of the LOCK prefix is not affected by the alignment of the memory field. Memory locking is observed
for arbitrarily misaligned fields.


好像是说不对齐都可以,我没理解错吧

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
9 [报告]
发表于 2013-01-10 10:19 |只看该作者
多谢楼上,确实是,是我理解的有问题,大体看了一下,没看仔细,因为看了紧接着一堆描述对齐的情况,所以想当然认为是对齐的。

刚才写了个程序测试,确实不对齐也可以用lock前缀访问,包括跨cache line和跨page,都可以不对齐访问。

The LOCK semantics are followed for as many bus cycles as necessary to update the entire operand.


猜测:many bus cycles除了指一些协议的锁操作,也包括关于不对齐的处理。

论坛徽章:
0
10 [报告]
发表于 2013-01-10 12:10 |只看该作者
应该就是访问不对齐的内存操作数需要2个以上总线周期,这些周期都要被锁定。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP