我知道在文件范围定义的volatile
个变量。编译器不允许对这些变量进行假设。它们几乎可以随时更改,编译时不能优化变量的读取。
现在我找到了这段代码
BOOL InstallHandler()
{
volatile BOOL b_bulk_erase = FALSE;
volatile BOOL b_test_read_write = FALSE;
volatile BOOL b_continue = TRUE;
...
if (b_test_read_write)
{
read();
write();
}
}
volatile
如何对应于堆栈的变量,即由一个线程拥有?
编辑:
由一个线程拥有,我想表达该变量未公开。地址不会给予其他任何内容。任何其他线程都不使用它。
答案 0 :(得分:5)
好的,我意识到这种不稳定的意图。
该功能是与硬件设备通信的设备驱动程序的一部分。在正常操作期间不使用函数read
和write
。
但是当开发人员在调试器中运行程序时,她可以在if
子句中设置断点并使用调试器更改变量。这将允许操纵执行并呼叫read
和write
。
volatile
禁止自if
子句测试const表达式以来可能的优化。如果没有volatile
整个if
可能不在代码中。
答案 1 :(得分:4)
只是因为,虽然变量本身在一个线程中,但没有什么能阻止你将其地址提供给其他线程。因此无法预见的修改。