C++学习笔记 24
2017-09-18 15:00
155 查看
volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。volatile的本意是“易变的”,不过翻译成“直接存取原始内存地址”更为合适。“易变”是因为外在因素引起的,象多线程,中断等,并不是因为用volatile修饰了的变量就是“易变”了,假如没有外因,即使用volatile定义,它也不会变化。
一般说来,volatile用在如下的几个地方:
1)中断服务程序中修改的供其它程序检测的变量需要加volatile;
2)多任务环境下各任务间共享的标志应该加volatile;
3)存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义。
另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。
参考这个链接讲讲C++中的volatile关键字
volatile和互斥锁的区别?
C++11标准中明确指出解决多线程的数据竞争问题应该使用原子操作或者互斥锁。
C和C++中的volatile并不是用来解决多线程竞争问题的,而是用来修饰一些因为程序不可控因素导致变化的变量,比如访问底层硬件设备的变量,以提醒编译器不要对该变量的访问擅自进行优化。
参考这个链接多线程编程中什么情况下需要加 volatile?
相关文章推荐
- C++学习笔记24,方法重写与方法隐藏
- C++学习笔记24-2 类模板
- C++学习笔记24 函数模板
- Effective C++ 学习笔记(24)
- C++学习笔记24——泛型算法之find
- C++学习笔记24,方法重写与方法隐藏
- C/C++学习笔记24:结构体与共用体
- C++学习笔记之对文件的操作<2>
- “Effective C++ Third Edition”学习笔记(三)
- lua学习笔记之C++ lua 互调
- More Effective C++学习笔记-条款1|2|3|4
- C++学习笔记(七)输入不定长度二维数组
- C++学习笔记-类1
- C++ 学习笔记(二) 多态的实现
- C++/GDI+ 学习笔记(二)——几个例子
- 24.Oracle深度学习笔记——使用存储提纲
- c++学习笔记--下标重载函数
- C++学习笔记16,C++11中的显式的默认构造函数以及显示删除默认构造函数
- C++ 学习笔记:不知道的运算符和未知的知识点
- C++精华(STL)学习笔记之算法