我试图在本地计算机上的标准库中搜索std::conidition_variable::wait
的实现方式,可以看到wait_unitl
,但是找不到wait
。
我的问题是,wait
函数是如何在内部实现的,一个线程将如何无限期地睡眠,是使用长时间睡眠还是特定于操作系统的完全不同的东西?
谢谢!
答案 0 :(得分:3)
抢先式多线程是一个很大程度上由操作系统控制的进程。它决定哪些线程获得时间片和/或分配给哪些内核,依此类推。因此,对于大多数低级线程原语(互斥量,条件变量等),实际工作是在OS调用内完成的。
是的,您可以在理论上实现类似条件的 条件变量,而无非就是原子访问和定时线程暂停。但是,它的性能会非常差。现代OS知道线程何时在等待条件,并且在条件满足时可以“立即”唤醒该线程。您的机制要求等待线程等待直到某个特定时间过去。
此外,您需要检查一堆虚假的唤醒,因此无缘无故地使用了线程时间。基于OS的实现将具有更少的虚假唤醒。