std::condition_variable::wait是如何实现的?

How is std::condition_variable::wait implemented?

我试图搜索 std::conidition_variable::wait 在我本地机器上的标准库中是如何实现的,我可以看到 wait_unitl 但找不到 wait.

我的问题是,wait 函数是如何在内部实现的,如何使线程无限期休眠,它是使用长时间休眠还是完全不同的 OS-特定的东西?

谢谢!

抢占式多线程是一个主要由操作系统控制的进程。它决定哪些线程将时间片 and/or 分配给哪些内核,等等。因此,对于大多数低级线程原语(互斥体、条件变量等),真正的工作是在 OS 调用中完成的。

是的,您可以理论上实现一些东西,比如一个条件变量,只不过是原子访问和定时线程挂起。但是,它的性能会非常差。现代 OS 知道线程何时等待某个条件,并且可以在条件满足时唤醒该线程 "immediately"。您的机制要求等待线程等到某个特定时间过去。

另外,您将有一大堆必须检查的虚假唤醒,因此无缘无故地使用了线程时间。基于 OS 的实现将有更少的虚假唤醒。