多个线程和boost的io_service

时间:2013-08-05 16:10:17

标签: c++ boost boost-asio

Boost的documentation说:在致电io_service之前,让boost::asio::io_service::run()做一些工作是很重要的。但是,如果我要做一些工作并且我的io_service对象运行方法正在运行到多个线程上会发生什么?我应该为每个线程提供1个工作,以防止其他人完成?或者我可以开始io在许多线程上运行并且只提供1项工作要做。我想提一下,我的问题中的“工作”一词并未提及io_service::work::work

1 个答案:

答案 0 :(得分:6)

io_service的工作状态不是由处理io_service的线程数决定的。例如,如果io_service有效,则通过io_service::run()处理io_service的所有线程将继续阻止处理事件循环,即使线程数量大于已发布工作量。因此,向io_service添加单个工作操作是安全的,然后有许多线程处理io_service

总的来说,除非在io_service构造函数中明确暗示并发性,否则io_service不会区分由单个线程或多个线程处理的事件循环。如threads overview中所述,io_service会将已加入其池的所有线程视为等效,以任意方式跨线程分配工作。