浅谈volatile
来源:互联网 发布:添加sql语句 编辑:程序博客网 时间:2024/04/30 08:15
int i;
i = *(volatile unsigned long *)0xfff40080;
用volatile关键字修饰变量或地址,相当于告诉编译器,这个修饰的值或地址指向的值会随时发生变化,每次使用时都需要去内存里重新读取它的值。
volatile对应的变量可能在你的程序本身不知道的情况下发生改变比如多线程的程序,共同访问的内存当中,多个程序都可以操纵这个变量你自己的程序,是无法判定何时这个变量会发生变化
还比如,他和一个外部设备的某个状态对应,当外部设备发生操作的时候,通过驱动程序和中断事件,系统改变了这个变量的数值,而你的程序并不知道。
对于volatile类型的变量,系统每次用到他的时候都是直接从对应的内存当中提取,而不会利用cache当中的原有数值,以适应它的未知何时会发生的变化,系统对这种变量的处理不会做优化——显然也是因为它的数值随时都可能变化的情况。
一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2 中可以禁止任务调度,3中则只能依靠硬件的良好设计了
0 0
- volatile浅谈
- 浅谈volatile
- 浅谈volatile的作用
- 浅谈java中的volatile
- 浅谈Java的volatile
- 浅谈volatile的作用
- 浅谈Volatile与多线程
- 浅谈volatile的作用
- 浅谈Java的volatile
- 浅谈java volatile
- 浅谈volatile关键字
- 浅谈Volatile与多线程
- 浅谈volatile关键字
- 浅谈c++volatile关键字
- 浅谈volatile变量的理解
- java中volatile关键字浅谈
- 浅谈volatile变量的理解
- 浅谈Java修饰关键字 transient和volatile
- 加载模块报错:version magic '2.6.32-504.el6.i686 SMP mod_unload 686 ' should
- 数组最长子段和java实现
- Hadoop集群安装遇到的问题
- Test
- 第二个项目前预演,完成了,(第6200小时的时候)
- 浅谈volatile
- 如何关闭移动web页面缩放功能
- 自己动手实现一个C#中List
- 数据库调优教程(四)Explain性能分析命令
- 多线程误区:一定会提高效率
- MAC T erminal(终端)
- linux 常用解压命令
- ROS 学习系列 -- RViz 实时观测机器人建立导航2D封闭空间地图过程 (SLAM)
- windows8.1登陆时输入密码后黑一下才能进系统