首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >while(!volatile);做什么?

while(!volatile);做什么?
EN

Stack Overflow用户
提问于 2012-05-11 14:55:12
回答 1查看 271关注 0票数 6

我在一个永远不会在同事代码中调用的部分中看到了这一点:

代码语言:javascript
复制
volatile unsigned char vol_flag = 0;
// ...
while(!vol_flag);

vol_flag在头文件中声明,但永远不会更改。这会导致程序在无限循环中挂起,我说的对吗?有没有办法走出困境?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-11 14:58:22

通常,像这样的代码表明vol_flag应该在某个时候从外部进行更改。在这里,外部可能意味着不同的线程、中断处理程序、一块硬件(在内存映射IO的情况下)等。此循环有效地等待更改标志的外部事件。

volatile关键字是程序员表达以下事实的一种方式:假定代码中显而易见的内容是不安全的:即标志在循环中不会更改。因此,它可以防止编译器进行可能损害代码背后意图的优化。相反,编译器被强制进行内存引用以获取标志的值。

请注意(与Java语言不同) C/C++中的volatile不建立发生之前的关系,也不保证易失性访问中内存引用的任何排序或可见性。此外,它不能确保变量引用的原子性。因此,它不是用于线程之间通信的工具。详情请参见this

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10546804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档