免费注册 查看新帖 |

Chinaunix

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

说一说:关于数据传送中 address bus 的工作原理 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-11-23 10:11 |只看该作者
谢谢mik版主的分析,但由于本人功力尚浅,还不能完全明白。现在问一个与之相关的比较实用一点的问题:

假设在32-bit的CPU下(Intel 的Pentiume之后的CPU)(SMP结构的多CPU),我定义了一个64-bit的全局变量:
unsigned long long g_ll

现在有两个线程,一个线程为writer,另外一个线程为reader;两个线程读写g_ll的时候不加锁。
假如writer写入的值依次是A1,A2,A3, ...
请问:reader读取的值是否有可能是除A1, A2, A3...之外的值?

如果这个全局变量是unsigned int呢?

谢谢!

论坛徽章:
0
12 [报告]
发表于 2009-11-25 10:32 |只看该作者

回复 #11 rc_hz 的帖子

本人的理解,不知道是否准确,供参考。
因为32-bit机器是默认4字节对齐的,所以这里不管是unsigned longlong 还是 unsigned int 都存在两种对齐情况,
1> 正好对齐在8字节的位置
2> 对齐于4字节的位置,但是不对齐于8字节。
(因为没有提到程序员手动对齐的操作,所以不会对齐于2字节或1字节)。

那么在情况1下,两种变量都会是atomic 的读写操作,所以不会有其它值出现。
但是在情况2下,因为是非atomic操作,所以可能读取到其它的值。

论坛徽章:
0
13 [报告]
发表于 2009-11-25 11:21 |只看该作者

回复 #12 darkdot 的帖子

感觉不是这样的

论坛徽章:
0
14 [报告]
发表于 2012-05-17 17:05 |只看该作者
很棒的访问内存atomic研究,ARM平台上跟X86也一致么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP