免费注册 查看新帖 |

Chinaunix

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

那为大侠给俺讲讲cache和volatie变量的关系 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-03-03 15:45 |显示全部楼层
原帖由 zhlyp 于 2008-3-3 15:31 发表
我在linux下编译的结果i=3
但是不理解楼上例子的意思

这就是volatie的另一个功能,主要用于嵌入式(嵌入式我不懂,说错误怪)
就是体现一个时序。
这里i的变化有3个过程, i = 1, i =2, i =3 ,编译器会把这个过程体现出来,汇编指令变为如下序列:
i 赋值为1
i 赋值为2
i 赋值为3

最终结果当然是3,只是体现了i变化的一个过程。

如果没有volatie修饰,编译器会把前两次赋值忽略掉,也就是所谓的优化掉,汇编指令变成一条:
i 赋值为3

论坛徽章:
0
12 [报告]
发表于 2008-03-03 16:04 |显示全部楼层
原帖由 zhlyp 于 2008-3-3 15:56 发表

奥,谢谢
那就是说那个例子应该错了
应该改成
  i = 1;  //1  不被优化 i=1

  i = 2;  //2  不被优化 i=2

  i = 3;  //3  不被优化 i=3

对,我估计是笔误

论坛徽章:
0
13 [报告]
发表于 2008-03-04 21:58 |显示全部楼层
原帖由 yangtou 于 2008-3-4 21:54 发表
cache一致不一定要写回内存,甚至不需要通过总线,比如双核系统共享写回式 L2 cache

如两核共享L2 cache,是无需写回内存。如果两核的L2 cache是分开的,则必写回内存
这个是intel前端总线架构决定的,参考资料我只知道mindshare那边讲P4前端总线的书,我的观点也是从那里得来的。
如果真有这种cache分开不同步回内存的CPU,希望能看到有关资料。

论坛徽章:
0
14 [报告]
发表于 2008-03-04 21:59 |显示全部楼层
原帖由 yangtou 于 2008-3-4 21:54 发表
cache一致不一定要写回内存,甚至不需要通过总线,比如双核系统共享写回式 L2 cache

哦,我没看到兄台说的是共享写回式 L2 cache
你说的是对的,这种情况不需要同步回内存,多谢指出。

论坛徽章:
0
15 [报告]
发表于 2008-03-20 22:15 |显示全部楼层
原帖由 cunettenuc 于 2008-3-20 20:05 发表



我有一个问题想请教, 就是在多线程中, 有一个全局变量没有用volatile去修饰, 而我只是用锁去进行互斥地访问.
那么假如我线程1在执行时将这个变量放到了cache中, 有没有这种可能: 也就是在放弃锁的时候这 ...

前面已经说了,如果读的线程和写的线程在一个CPU,那么它直接从cache里读到这个变量的值。
如果读的线程在另一个CPU,那么硬件保证了cache的一致性,见前面的帖子。
两种情况都保证读到的值是最新的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP