【问题标题】:sleep boost::thread indefinitely and wake from another thread?sleep boost::thread 无限期地从另一个线程中唤醒?
【发布时间】:2013-08-18 03:36:31
【问题描述】:

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

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

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

如果可能的话,如何在多个线程尝试唤醒时做到这一点?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      是的,pthread_mutex_t+pthread_cond_t是正确的使用方法,你可以找到对应的 提升中的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 2022-11-03
        • 1970-01-01
        • 2013-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多