【发布时间】:2016-10-29 18:16:32
【问题描述】:
我打电话给boost::asio::io_service::run(),它立即返回,因为它没有工作要做。
稍后将有一个不同的线程将工作排队,但我不希望run 线程退出。
解决方法是忙着等待运行:
while(true) service.run();
但是当没有工作要做时,这会浪费 CPU。
另一种方法是等待每次在服务排队时引发的事件。
这种方式有一个竞争:如果一个线程停止工作,然后第二个线程发布工作并在第一个线程有机会等待它之前引发事件,第一个线程将永远等待。
我宁愿避免这种情况,让服务知道什么时候有工作要做。
是否可以做类似的事情:
while(true)
{
service.wait_for_work();
service.run();
}
【问题讨论】:
标签: c++ boost boost-asio