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%。
现实中会发生什么?
在我使用过的任何编译器和操作系统中都没有。通常,\xc2\xa0同步原语的底层操作作为内核\xc2\xa0调用执行,除非它\xc2\xa0显式声明,并且\xc2\xa0OS的内核关心\xc2\xa0它是如何执行的。\xc2\xa0即使它不在标准中,我认为它只是为了允许符合 C++ 标准的编译器存在于奇异的体系结构上。除非你使用的是非常罕见和特定的东西,否则你不应该关心它。
\n| 归档时间: |
|
| 查看次数: |
1634 次 |
| 最近记录: |