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

Mos*_*aev 1 c++ multithreading condition-variable

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

我的问题是,该wait函数是如何在内部实现的,如何使线程无限期地休眠,它是使用某种长时间的休眠还是特定于操作系统的完全不同的东西?

谢谢!

Nic*_*las 5

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

是的,理论上你可以实现类似的东西条件变量的东西,而只需原子访问和定时线程挂起。然而,它的表现会非常差。现代操作系统知道线程何时正在等待条件,并且可以在满足条件时“立即”唤醒该线程。您的机制要求等待线程等待,直到经过某个特定时间。

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