【问题标题】:boost asio concurrent async_read and async_write提升 asio 并发 async_read 和 async_write
【发布时间】:2018-09-22 01:13:52
【问题描述】:

查看文档,看起来 TCP 套接字对象不是线程安全的。所以我不能从一个线程发出 async_read 并从另一个线程同时发出 async_write ?另外我猜它也适用于 boost::asio::write()?

我可以发出 write() - 同步的,而我从另一个线程执行 async_read 吗? 如果这不安全,那么唯一的方法可能是获取套接字本机句柄 并使用同步linux机制实现并发读写。我有一个读取和写入实际上是独立的应用程序。

【问题讨论】:

    标签: c++14 boost-asio asio


    【解决方案1】:

    对于您列出的用例,它是线程安全的。您可以在一个线程中阅读,并在另一个线程中写入。您可以为此使用同步操作和异步操作。

    但是,如果您尝试从多个线程执行一种专用操作类型(例如读取),则会遇到问题。特别是如果您使用的是独立/组合操作(boost::asio::read(socket) 而不是socket.read_some()。原因之一是原始操作是原子/线程安全的。组合操作通过多次调用原始操作来工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-05
      • 2017-07-20
      • 2016-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多