c++ - 空 while 循环不检查条件

标签 c++ multithreading sleep conditional-statements while-loop

在一个多线程 C++ 程序中,我有一个在一个线程中运行的等价物:

while(obj->member) { } // waiting for obj->member to be set to false in another thread

在另一个线程中,obj->member 被设置为 false。但是,即使将其设置为 false,循环也不会中断。如果我将其更改为:

while(obj->member) { Sleep(1) }

它按预期工作,当 obj->member 在另一个线程中设置为 false 时中断。
为什么会这样?

最佳答案

尝试让成员 volatile。这将强制它在每次使用时从内存中获取,而不是从 CPU 寄存器中获取(这是编译器可能优化它的方式。)

关于c++ - 空 while 循环不检查条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3505790/

相关文章:

c++ - 将 C++ 插件插入到 C 软件中进行内存管理

android - 无法找到 android NDK 堆栈跟踪

c++ - 从其他程序隐藏文件

java - 线程没有控制台输出。线程不起作用?

objective-c - 线程嵌套 for 循环

c++ - 如何使用 C++ 和 CMake 在 Windows 上进行开发

java - Platform.runLater,处理大量任务太慢

c - 为什么 SIGINT 停止 sleep 不止一次?

Android:哪些事件会唤醒设备

Java Thread.sleep long 还是 int?