免费注册 查看新帖 |

Chinaunix

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

volatile的变量可见性指的是什么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-17 10:40 |只看该作者 |倒序浏览
http://www.builder.com.cn/2007/1107/612888.shtml
在这篇文章中提到了volatile的作用和局限性
我对"volatile仅仅能保证变量可见性, 无法保证原子性."中的 变量可见性 不太理解。

是否指的是 volatile保证该数据不会被拷贝到本地内存,始终只有一个,因此对多线程来说,每个线程可见的数据field是唯一的?

论坛徽章:
0
2 [报告]
发表于 2008-01-17 20:17 |只看该作者
volatile的可见性是指一个线程(或者说cpu)对变量的变动可以即时被其他线程获得。一般人会觉得奇怪,因为平时不声明的话好像也可以做到这一点。但仔细考察cpu对内存的访问就可以知道,cpu访问内存时可能从寄存器,cache中获得值,或者根本不去访问(如果编译器认为没必要的话),这样其他cpu对该内存的修改它是不知道的。声明为volatile后可以简单理解为让cpu每次都从内存中去获得值,避免这种问题。

论坛徽章:
0
3 [报告]
发表于 2008-01-21 23:50 |只看该作者
楼上回答的已经比较全面了.

论坛徽章:
0
4 [报告]
发表于 2008-01-22 09:50 |只看该作者
其实感觉volatile这个修饰符的作用很有限,它的作用范围仅仅是变量级别的,而且如果变量做了
if(++i == 1==)
{
   i =1;
}

return i;
之类的操作,感觉就完全没有意义了,必须加synchronized进行线程间同步。
记得inside vm这本书中还说过,这个修饰符是不强制支持的,所以用这个还真是不保险。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP