gpt4 book ai didi

c++ - boost.asio 在单线程和多线程进程中的复合操作

转载 作者:行者123 更新时间:2023-11-28 02:46:05 24 4
gpt4 key购买 nike

关于 boost.asio 复合操作,官方文档和我阅读过的关于该主题的各种线程中有几处内容不清楚。

场景

两个 boost::asio::async_write 请求 A 和 B 被安排在一个 TCP 套接字上。

问题

  1. 在单线程进程中,会不会出现A和B并发执行的情况?即,对 A 的 async_write_some 的中间调用与 B 的调用混合在一起(这实际上呈现了损坏的流)?
  2. 如果 (1) 的答案是肯定的,io_service::strand 是否解决了单线程进程中的问题?它是否确保 A 的所有中间调用在 B 开始之前完成?
  3. 当多个线程执行io_service::run()时,io_service.strand是否解决了(1)在多线程进程中的问题?它是否确保 A 的所有中间调用在 B 开始之前完成?

最佳答案

文档明确指出:"The program must ensure that the stream performs no other write operations (such as async_write, the stream's async_write_some function, or any other composed operations that perform writes) until this operation completes."

因此,绝不能同时调用多个 async_write。在单线程情况下,可以将它们链接起来,在前一个完成处理程序中调用后续的 async_write

如果io_service::run在多线程中运行,只需用strand包裹async_write的完成处理程序,Asio will synchronize all中间内部处理程序。

关于c++ - boost.asio 在单线程和多线程进程中的复合操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24378648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com