查看文档,看起来TCP套接字对象不是线程安全的。所以我不能从一个线程发出async_read而从另一个线程同时发出async_write?另外我猜它也适用于boost :: asio :: write()?
我可以发出write() - 同步,而我从另一个线程执行async_read吗? 如果这不安全,那么唯一的方法就是获取套接字本机句柄 并使用同步linux机制来实现并发读写。我有一个应用程序,其中读取和写入实际上是独立的。
答案 0 :(得分:1)
对于您列出的用例,它是线程安全的。你可以在一个线程中读取,然后在另一个线程中写入。您可以使用同步和异步操作。
如果您尝试从多个线程执行一个专用操作类型(例如读取),则会遇到问题。特别是如果你使用独立/组合操作(boost::asio::read(socket)
而不是socket.read_some()
。原因是原始操作是原子/线程安全的。并且组合操作通过多次调用进入原语。