2013-08-05 82 views
2

升压的​​3210说:重要的是在致电boost::asio::io_service::run()之前给io_service做一些工作。但是如果我要做一些工作并且我的io_service对象运行方法正在多线程上运行,会发生什么?我应该给每个线程1个工作,以防止其他人完成?或者我可以启动io的许多线程运行,并只给1件工作。我想提一提,在我的问题中,'工作'这个词不是指io_service::work::work多线程和升压io_service

回答

5

io_service的工作状态不是由处理io_service的线程数量决定的。例如,如果io_service已经工作,即使线程数量大于发布的工作量,处理io_service通过io_service::run()的所有线程仍将阻止处理事件循环。因此,将单个工作操作添加到io_service是安全的,然后有许多线程处理io_service。总体而言,除非在io_service构造函数中明确暗示并发性,否则io_service不会区分由单个线程或多个线程处理的事件循环。如threads overview中所述,io_service将把所有加入其池的线程视为等效线程,以任意方式在线程之间分配工作。