gpt4 book ai didi

c - while(!volatile); 是做什么的?做?

转载 作者:太空狗 更新时间:2023-10-29 17:16:30 25 4
gpt4 key购买 nike

我在同事代码中从未调用过的部分中看到了这一点:

volatile unsigned char vol_flag = 0;
// ...
while(!vol_flag);

vol_flag 在头文件中声明,但从未更改。我是否正确认为这会导致程序陷入无限循环?有什么办法吗?

最佳答案

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

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

请注意(与 Java 不同)C/C++ 中的 volatile 不建立happens-before 关系,并且不保证 volatile 访问中内存引用的任何顺序或可见性.此外,它不确保变量引用的原子性。因此,它不是线程间通信的工具。参见 this了解详情。

关于c - while(!volatile); 是做什么的?做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10546804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com