是否可以在工作完成后无限期地boost::thread
睡眠,然后从另一个boost::thread
唤醒它?
使用while(1)
非常适合我希望线程以100%运行所有内核的专用服务器,但我正在编写一个websocket ++服务器以在桌面上运行,因此我只想要{ {1}}当他们真正有工作要做的时候就可以运行,所以我可以在我的桌面上做其他工作而不会有性能问题。
我已经看到其他例子boost::thread
被设置为boost::thread
持续一段时间,但我宁愿不花时间试图找到最佳常数;此外,我需要websocket ++服务器在接收要处理的数据时尽快响应。
如果可以,多个线程试图唤醒怎么办?
答案 0 :(得分:3)
此机制由所谓的条件变量实现,请参阅boost::condition_variable。本质上,等待线程将在锁定的互斥锁上休眠,直到另一个线程发出信号,从而将其解锁。
留意虚假的叫醒声。有时,等待线程将被唤醒而不会发出信号。这意味着您仍然应该使用一个while循环来检查谓词(或条件),以便在实际唤醒和虚假唤醒之间进行解密。
答案 1 :(得分:1)
是的,pthread_mutex_t + pthread_cond_t是正确的用法,你可以找到相应的 提升中的事情。