Boost 的 documentation说:在调用 boost::asio::io_service::run()
之前给 io_service
一些工作很重要。但是,如果我需要做一些工作并且我的 io_service
对象运行方法正在多个线程上运行,会发生什么情况?我应该给每个线程 1 个工作,以防止其他人完成吗?或者我可能会在多个线程上启动 io 运行,并且只提供 1 个工作要做。我想提一下,我的问题中的“工作”一词不是指 io_service::work::work
。
最佳答案
io_service
的工作状态不是由处理io_service
的线程数量决定的。例如,如果 io_service
有工作,则所有线程通过 io_service::run()
处理 io_service
将保持阻塞处理事件循环,即使线程数量大于发布的工作量。因此,将单个工作操作添加到 io_service
,然后让多个线程处理 io_service
是安全的。
总的来说,除非在 io_service
构造函数中特别提示并发,否则 io_service
不会区分其事件循环是由单线程还是多线程处理。如 threads overview 中所述, io_service
会将所有加入其池的线程视为等价的,以任意方式在线程之间分配工作。
关于c++ - 多线程和boost的io_service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18062780/