我有一个用这样boost::asio::io_service
的配方制成的线程池。我想知道如何中断发布到它的任务(不杀死线程),以便将它们替换为池中的下一个任务?
问问题
1037 次
1 回答
1
boost::asio 中的回调通常应该相当快。他们应该只做一些工作,安排另一项工作并完成。这将是任务失去 CPU 和其他任务将被执行的点。
有boost::thread::interrupt()
and boost::thread_group::interrupt_all()
,但它们只能在中断点停止执行线程。中断将被视为异常boost::thread_interrupted
。这意味着,您必须以某种方式处理异常,并且在您的情况下 - 释放当前任务。它比仅执行一步处理和调度处理程序要复杂得多。
此外,您可以使用interrupt()
和interrupt_all()
在执行您自己的例程的线程中进行操作,而对于正在运行的线程则不是这样io_service::run()
。可以想象,这boost::thread_interrupted
是在run()
方法内部抛出的,而不是异步处理程序,这可能会以意外行为结束。
于 2012-05-29T11:26:56.760 回答