在一个多线程 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/