初学者关于volatile的疑问!

banking 2003-05-04 11:47:09
究竟c++中volatile修饰符的用法是什么?
可以给个实用的例子我吗?
...全文
19 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
banking 2003-05-05
  • 打赏
  • 举报
回复
哦,实在太谢谢两位. 特别是fullsail(远航)竟然解释的如此详细。
我都看懂了。
再次谢谢你们。
csdn有象你们一样的成员真是福气!真心话。
fullsail 2003-05-05
  • 打赏
  • 举报
回复
The volatile keyword is a type qualifier used to declare that an object can be modified in the program by something such as the operating system, the hardware, or a concurrently executing thread.

一个告诉编译器,不要对这个变量进行优化的修饰符号。比如在一个变量和串口向关联,串口变化时,这个变量会改变,但如果编译器优化了,把这个放到寄存器中去了,这时候变量改变了,程序还以为值是寄存器中的值,这就会有问题。

同样这样的问题也存在多线程中,比如thread1 ,thread2,同时访问一个变量
int nVint;
如果编译是编译器进行了优化,在thread1 使用nVint是将变量放入了寄存器中去了,这是如果thread2要使用 nVint变量,thread2实际上就不知道nVint的真正值。
所以你要这样告诉编译器,不要优化。
int volatile nVint;

对几种情况你要考虑这个关键值:
1、多任务,线程环境。
2、存储器映射的硬件的寄存器、
Appla 2003-05-05
  • 打赏
  • 举报
回复
volatile表示被修饰的变量,可能被其他线程等或操作系统修改,这个涉及到优化的问题。特别在多线程编程采用共享数据的方法通讯方面有用。

example:

int volatile i;
banking 2003-05-05
  • 打赏
  • 举报
回复
ok!希望大家都好运.明天会更好.(土)
fullsail 2003-05-05
  • 打赏
  • 举报
回复
不用,兄弟,多看MSDN,就是要学点英文。可惜我自己当年英语没有学好,如果英语好,很多事情网上都有答案,而且全面。祝好运。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧