提振.Asio复合操作在单线程和多线程进程
boost.asio compound operations in single and multi threaded processes
关于boost有几件事。从官方文档和我读过的关于这个主题的各种线程中不清楚的asio复合操作。
两个boost::asio::async_write
请求A和B被调度到一个TCP套接字上。
- 在单线程进程中,a和B可以并发执行吗?也就是说,对A的
async_write_some
的中间调用与B的调用混合在一起(这基本上呈现了一个损坏的流)? - 如果(1)的答案是肯定的,
io_service::strand
是否解决了单线程进程的问题?它能保证A的所有中间调用在B开始之前完成吗? - 当多个线程执行
io_service::run()
时,io_service.strand
是否解决了多线程进程中(1)的问题?它能保证A的所有中间调用在B开始之前完成吗?
文档明确声明:"程序必须确保在此操作完成之前,流不执行其他写操作(如async_write,流的async_write_some函数,或任何其他执行写的组合操作)。"
因此,不能并发调用多个async_write
。在单线程的情况下,可以将它们链接起来,在前一个完成处理程序中调用后续的async_write
。
如果io_service::run
在多个线程中运行,只需将async_write
的完成处理程序封装在strand
中,Asio将同步所有中间内部处理程序。
相关文章:
- 在C++中使用cURL和多线程
- 多线程:线程或进程.h - C++
- 优化吞吐量:多线程与多进程
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 多线程中的 std::basicstring 的运行时分段错误C++点燃进程
- 在 Linux 中从单独的单线程进程生成多线程进程时出现问题
- 使用 c++ 的多线程和并行进程
- 与多线程一起登录多进程应用程序
- 多线程排挤了其他进程
- C++如何检查文件是否在使用-多线程多进程系统
- 多线程和多进程应用程序的锁定机制之间有什么区别
- gdb是如何连接到多线程进程的
- 提振.Asio复合操作在单线程和多线程进程
- c++多线程和进程中的向量
- gdb如何连接到多线程进程
- 独立的多线程进程同时阻塞
- 在多线程进程中处理信号的示例
- 多线程进程中的信号处理
- 多线程/分叉服务器守护进程的模型
- 如果一个且只有一个线程被停止,可以从多线程进程中跟踪读/写数据