volatile的解析
来源:互联网 发布:node 捕捉子进程错误 编辑:程序博客网 时间:2024/05/29 11:25
volatile关键字是一种类型的修饰符,用它声明变量表示可以被某些编译器更改,volatile变量影响编译器的输出结果。
一般来说,volatile用在如下的几个地方:
1 、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各种任务间共享的标志应该加volatile
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都有可能是不同的意义;
volatile关键字声明的变量,编译器(compiler)对访问该变量的代码就不再不做任何的优化,从而达到对特殊地址的稳定访问。
例如:
void main(void){
volatile int i ;
int j;
i = 1;(不被优化)
i = 2;(不被优化)
j = 1;(被优化)
j = 2;
}
优化的结果如下:
void main(void){
volatile int i ;
int j;
i = 1;
i = 2;
j = 2;
}
有结果可知,j = 1 指令丢失,如果是使用volatile则compiler就不会做任何的优化,从而保证程序的原意。
使用volatile定义的变量在程序外被改变,每次都要从内存中读取.
例如:
volatile int a;
a= 0;
while(!a){
..........
}
do_something();
如果没有volatile的时候,当while函数里a的值被改变时,do_something函数也不会执行,因为a的值没有从内存中读取,所以a的值没有改变,一直是0。当有volatile的时候,当while函数里a的值被改变时,使用时都要从a的内存地址中读取,从而跳出while循环体,执行do_something函数。
- volatile的解析
- Java的volatile关键字解析
- volatile解析
- java中volatile关键字的解析
- 举例解析Java中Volatile的作用
- Java并发编程:volatile关键字解析(五.使用volatile关键字的场景)
- Java并发编程:volatile关键字解析。以及volatile和synchronize的区别
- 你真的了解volatile关键字吗?深入解析java并发与volatile
- C# volatile ,lock解析
- C++关键字volatile解析
- java之volatile解析
- Java 之 volatile 解析
- volatile关键字解析
- volatile关键字解析
- java volatile 深入解析
- java Volatile关键字解析
- volatile关键字解析
- volatile关键字解析
- GetAsyncKeyState()& 0x8000 是什么意思
- Centos_Cache-only_DNS.sh
- windows消息机制
- Zookeeper(三)配置
- word之八大文本替换技巧
- volatile的解析
- MySQL C API 中的mysql_num_rows()
- Centos_Close_selinux.sh
- Centos_DNS_master_slave.sh
- 将下载都是大写字母的网页里面的html转换为小写的简单方式
- ubuntu常用命令
- cf#168div2
- 布局网页表格要求其列平均分布的简单操作
- OpenIL(DevIL)- 开发者图像库