sleep boost :: thread无限期地从另一个线程唤醒?

时间:2013-08-18 03:36:32

标签: c++ linux boost concurrency thread-sleep

是否可以在工作完成后无限期地boost::thread睡眠,然后从另一个boost::thread唤醒它?

使用while(1)非常适合我希望线程以100%运行所有内核的专用服务器,但我正在编写一个websocket ++服务器以在桌面上运行,因此我只想要{ {1}}当他们真正有工作要做的时候就可以运行,所以我可以在我的桌面上做其他工作而不会有性能问题。

我已经看到其他例子boost::thread被设置为boost::thread持续一段时间,但我宁愿不花时间试图找到最佳常数;此外,我需要websocket ++服务器在接收要处理的数据时尽快响应。

如果可以,多个线程试图唤醒怎么办?

2 个答案:

答案 0 :(得分:3)

此机制由所谓的条件变量实现,请参阅boost::condition_variable。本质上,等待线程将在锁定的互斥锁上休眠,直到另一个线程发出信号,从而将其解锁。

留意虚假的叫醒声。有时,等待线程将被唤醒而不会发出信号。这意味着您仍然应该使用一个while循环来检查谓词(或条件),以便在实际唤醒和虚假唤醒之间进行解密。

答案 1 :(得分:1)

是的,pthread_mutex_t + pthread_cond_t是正确的用法,你可以找到相应的  提升中的事情。