【发布时间】:2011-03-31 03:58:57
【问题描述】:
在一个多线程的 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 时,它按预期工作并中断。
为什么会这样?
【问题讨论】:
-
请不要使用忙等待 - 了解条件变量或类似的同步原语。
-
什么?我不知道那是什么意思。
-
我将支持@Arkadiy 所说的内容(如果您不知道这意味着什么,则需要在编写更多多线程代码之前进行大量阅读)。除了繁忙的等待(这只是一种糟糕的形式)之外,您的代码也不是线程安全的。但是,考虑到您在在这种确切情况下所做的事情的简单性,我认为您不会在任何常见的 CPU 架构上遇到问题。
标签: c++ multithreading sleep conditional-statements while-loop