c – while(!volatile);做?

前端之家收集整理的这篇文章主要介绍了c – while(!volatile);做?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个从未在同事的代码调用过的部分中看到了这个:
volatile unsigned char vol_flag = 0;
// ...
while(!vol_flag);

vol_flag在头文件中声明,但永远不会更改.我是否正确,这会导致程序无限循环?有办法吗?

解决方法

通常这样的代码表示预期vol_flag会在某个时刻从外部更改.这里,外部可能意味着不同的线程,中断处理程序,一块硬件(在内存映射IO的情况下)等.此循环有效地等待改变标志的外部事件.

volatile关键字是程序员表达这样一个事实的方式,即假设从代码中看出的内容是不安全的:即在循环中标志不会改变.因此,它阻止编译器进行可能损害代码背后意图的优化.相反,编译器被强制进行内存引用以获取标志的值.

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

原文链接:https://www.f2er.com/c/116733.html

猜你在找的C&C++相关文章