码迷,mamicode.com
首页 > 其他好文 > 详细

volatile

时间:2014-08-30 21:34:59      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   使用   ar   数据   代码   html   log   

对于这样的代码:

?

1

2

3

4

volatile int i = 10; 

int a = i;

... //其他代码,并未明确告诉编译器,对i进行过操作

int b = i;

    volatile 指出 i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在b中。而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在b中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问。

    更多的可能是多线程并发访问共享变量时,一个线程改变了变量的值,怎样让改变后的值对其它线程 visible一般说来,volatile用在如下的几个地方: 

当两个线程都要用到某一个变量且该变量的值会被改变时,应该用volatile声明,该关键字的作用是防止优化编译器把变量从内存装入CPU寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,一个使用寄存器中的变量,这会造成程序的错误执行。volatile的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值

volatile

标签:style   blog   http   使用   ar   数据   代码   html   log   

原文地址:http://www.cnblogs.com/notlate/p/3946842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!