0

是否有可能boost::thread在它的工作完成后无限期地睡一觉,然后再从另一个人中唤醒它boost::thread

使用while(1)s 非常适合专用服务器,我希望线程以 100% 运行所有内核,但我正在编写一个 websocket++ 服务器以在桌面上运行,因此我只希望boost::threads 在它们实际有工作时运行做,所以我可以在我的桌面上做其他工作而不会影响性能。

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

如果这是可能的,如何通过尝试唤醒多个线程来完成?

4

2 回答 2

3

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

当心虚假唤醒。有时等待线程会在没有收到信号的情况下唤醒。这意味着您仍然应该放置一个 while 循环来检查谓词(或条件)以破译真实唤醒和虚假唤醒。

于 2013-08-18T03:45:08.190 回答
1

是的,pthread_mutex_t+pthread_cond_t 是正确的使用方式,可以在boost中找到对应的东西。

于 2013-08-18T03:57:07.717 回答