volatile 关键字
来源:互联网 发布:办公自动化软件速成班 编辑:程序博客网 时间:2024/06/13 09:53
我相信你一定遇到过这样的问题:你把某人的名字和电话号码写到你的通讯录中,数个月之后企图打电话给这个人,却发现资料已经过期了。
同样的情况也可能发生在编译器为你产生的程序代码中。
编译器最优化的结果是,设法把常用到的数据放在 CPU 的内部寄存器中。这些寄存器就像你的通讯录一样。数据从寄存器中读出,远比从内存中读出快得多。
当然啦,如果另一个线程改变了内存中的变量值,那么此变量在寄存器中的拷贝值就算是“过期”了。
在一个单线程中这种情况不可能发生。编译器可以分析你的程序的每一个操作,然后确保数据在适当时候会被重新载入。然而在一个多线程程序中就不可能知道其他线程在做什么,所以编译器一定不能够允许让一个共享变量的值拷贝到寄存器中。
C和 C++ 有 一 个 鲜 为 人 知 的 关 键 字 , 教 导 编 译 器 如 何 在 一 个variable-by-variable的基础上采取行动。这个关键字是 volatile(译注:中文意思是“有挥发性的、易变的”)。这个关键字告诉编译器不要持有变量的临时性拷贝。它可以适用于基础类型,如int或long,也适用于一整个C结构或C++类。后面这种情况下,结构或类的所有成员都会被视为volatile 。
即使使用了volatile关键词,依然必须要加锁。
使用volatile 并不会否定 critical sections 或 mu texes 的需要。例如你说:
a = a + 3
还是会有一小段时间,a会被放置在一个寄存器中,因为算术运算只能够在寄存器中进行。一般而言,volatile 关键字适用于行与行之间,而不是放在行内。
0 0
- volatile关键字
- 关键字volatile
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- volatile关键字
- 关键字volatile
- volatile关键字
- volatile关键字
- volatile 关键字
- 关键字 volatile
- volatile关键字
- iOS TextView自适应文字高度
- ubuntu把电脑上的文件传到另一台电脑上
- Android Drawable Resource学习(十)、ScaleDrawable
- 怎么用CSS设置div里面的table水平居中
- Base64算法函数VB6
- volatile 关键字
- 职责链模式
- Android事件分发机制完全解析
- Android视频录制命令screenrecord
- iOS开发UI篇—Modal简单介绍
- 为什么 utf8没有字节序,utf16、utf32有字节序
- iOS 使用第三字体
- Xcode6&7之iOS视图调试
- android web开发实例总结