等待条件变量是否会加载 CPU 内核?

Tim*_*sov 5 c++ multithreading

等待条件变量是否会导致循环使用指令将 CPU 内核加载到 100%?这就是在 C++ 中等待 cvar 的方式:

void worker_thread()
{
    // Wait until ready turns true and the condition variable is notified
    std::unique_lock<std::mutex> lk(m);
    cv.wait(lk, []{return ready;}); //<-- does this load the cpu?
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

我假设这样的事情是底层实现:

while (1)
{
    lock mutex;
    if (condition) signal();
    unlock mutex;
}
Run Code Online (Sandbox Code Playgroud)

由于没有 Sleep(),此代码会将运行它的处理器内核加载到 100%。

现实中会发生什么?

Leo*_*giy 1

在我使用过的任何编译器和操作系统中都没有。通常,\xc2\xa0同步原语的底层操作作为内核\xc2\xa0调用执行,除非它\xc2\xa0显式声明,并且\xc2\xa0OS的内核关心\xc2\xa0它是如何执行的。\xc2\xa0即使它不在标准中,我认为它只是为了允许符合 C++ 标准的编译器存在于奇异的体系结构上。除非你使用的是非常罕见和特定的东西,否则你不应该关心它。

\n