【问题标题】: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()。原因之一是原始操作是原子/线程安全的。组合操作通过多次调用原始操作来工作。