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

时间:2019-12-01 02:26:24

标签: c++ multithreading condition-variable

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

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

谢谢!

1 个答案:

答案 0 :(得分:3)

抢先式多线程是一个很大程度上由操作系统控制的进程。它决定哪些线程获得时间片和/或分配给哪些内核,依此类推。因此,对于大多数低级线程原语(互斥量,条件变量等),实际工作是在OS调用内完成的。

是的,您可以在理论上实现类似条件的 条件变量,而无非就是原子访问和定时线程暂停。但是,它的性能会非常差。现代OS知道线程何时在等待条件,并且在条件满足时可以“立即”唤醒该线程。您的机制要求等待线程等待直到某个特定时间过去。

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