Boost :: Asio - 当有处理程序运行时唤醒一个线程

时间:2016-08-03 13:21:18

标签: c++ multithreading boost boost-asio

处理Asio处理程序的常用方法是让一个线程(或几个线程)定期轮询io_service(即调用io_service::poll())来运行处理程序或使用io_service::run(),阻塞线程直到有工作要做,在这种情况下,线程将运行所需的处理程序并返回或再次进入休眠状态。

但是,我想创建一个系统,其中一个线程不仅负责运行Asio处理程序,还需要使用条件变量与另一个线程同步。基本上,我希望线程能够完成所有这些:

  • 当有需要处理的Asio处理程序时唤醒(即如果我调用io_service::poll(),则会处理一个或多个处理程序。)
  • 当我的条件变量显示非Asio工作时唤醒。
  • 否则就睡不着。

换句话说,我需要一种方法让Asio告诉我有处理程序准备好执行,而不必忙于等待或不断轮询。理想情况下,当工作可用时,Asio会以某种方式发出一个线程信号,然后该线程将唤醒我的主工作线程,该线程将处理Asio处理程序。该工作线程也偶尔被另一个线程唤醒,并将处理其他非Asio相关工作。

这是否可行,或者我应该重新考虑如何设计我的系统?

0 个答案:

没有答案