c++ - 多线程和boost的io_service

标签 c++ boost boost-asio

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/

相关文章:

c++ - if (cin >> x) 和 if (!(cin >> x).fail()) 有什么区别?

c++ - BOOST_FOREACH 和没有 typedef 的模板

c++ - Boost Asio SSL 握手永远不会返回

multithreading - 多线程boost-asio服务器(vs boost异步服务器教程)

c++ - 将 C++ 项目与 Qt 项目合并时出现的问题

c++ - ioService.post(boost::bind(&myFunction, this, attr1, attri2) 不发布工作

python - 多重继承/虚函数

c++ - 从具有基类 ptr 的 vector 中删除

c++ - 在模板类中定义的枚举上嵌套类的部分特化

c++ - 传递参数以在 C++ 中 boost odeint