繁体   English   中英

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

[英]How is std::condition_variable::wait implemented?

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

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

谢谢!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM