处理Asio处理程序的常用方法是让一个线程(或几个线程)定期轮询io_service
(即调用io_service::poll()
)来运行处理程序或使用io_service::run()
,阻塞线程直到有工作要做,在这种情况下,线程将运行所需的处理程序并返回或再次进入休眠状态。
但是,我想创建一个系统,其中一个线程不仅负责运行Asio处理程序,还需要使用条件变量与另一个线程同步。基本上,我希望线程能够完成所有这些:
io_service::poll()
,则会处理一个或多个处理程序。)换句话说,我需要一种方法让Asio告诉我有处理程序准备好执行,而不必忙于等待或不断轮询。理想情况下,当工作可用时,Asio会以某种方式发出一个线程信号,然后该线程将唤醒我的主工作线程,该线程将处理Asio处理程序。该工作线程也偶尔被另一个线程唤醒,并将处理其他非Asio相关工作。
这是否可行,或者我应该重新考虑如何设计我的系统?