http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html
C/C++中volatile关键字
1、没有volatile关键字
#include "stdio.h"void main(void)
{
int i = 10;
int b = 0;
printf("%d\n",i);
_asm {mov dword ptr [ebp-4],20h}
b = i;
printf("%d\n",b);
getchar();
}
然后,在 Debug 版本模式运行程序,输出结果如下:
i = 10
i = 32
然后,在 Release 版本模式运行程序,输出结果如下:
i = 10
i = 10
2、使用volatile关键字
#include "stdio.h"
void main(void)
{
volatile int i = 10;
int b = 0;
printf("%d\n",i);
_asm {mov dword ptr [ebp-4],20h}
b = i;
printf("%d\n",b);
getchar();
}
分别在 Debug 和 Release 版本运行程序,输出都是:
i = 10
i = 32
有些变量是用volatile关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,
应该用volatile声明,该关键字的作用是防止优化编译器把变量从内存装入CPU寄存器中。如果变量被装入寄存器,
那么两个线程有可能一个使用内存中的变量,一个使用寄存器中的变量,这会造成程序的错误执行。
volatile的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值