是否可以同时调用async_send和async_receive进行线程安全?

时间:2010-11-04 15:47:11

标签: c++ sockets boost thread-safety boost-asio

我明白两次调用boost::asio::ip::tcp::socket::async_receive(或boost::asio::ip::tcp::socket::async_send)可能会导致不良行为。 如果我同时拨打boost::asio::ip::tcp::socket::async_reciveboost::asio::ip::tcp::socket::async_send,这样可以吗?

我将有2个或更多线程运行boost::asio::run,因此您需要将其考虑在内..

由于

1 个答案:

答案 0 :(得分:4)

这一定没问题。如何在单个服务上执行全双工异步通信?您需要始终收到未完成的接收数据。

Boost docs仅表示必须连续调用async_readasync_write中的每一个。例如,对于async_read

  

该计划必须确保   流不执行其他读取   操作(例如async_read ,.   stream的async_read_some函数,或   任何其他组成的操作   执行读取)直到此操作   完成。

socket的文档在这一点上并不具体,这是真的。