Boost.asio:我可以从一个线程同时执行async_read和async_write吗?

时间:2012-11-29 16:16:39

标签: c++ boost asynchronous boost-asio

我已经读过不建议对来自不同线程的套接字进行多次操作。但是,如果我从同一个线程socket.async_read和下一个socket.async_write调用(不等待前一个完成)怎么办?当其中一个操作完成时,我可以预见到正确的回调会运行吗?

1 个答案:

答案 0 :(得分:11)

我发现是的,您可以在同一个套接字上有一个待处理async_read和一个待处理async_write而没有问题。当您调用io_service::run()方法时,回调将按预期完成。

在同一个套接字上发出多个async_reads,或在同一个套接字上发出多个async_writes,可能会导致意外行为,具体取决于所涉及的套接字类型。特别是,在同一个TCP套接字上使用多个async_writes会导致数据以与您原先预期不同的顺序发出,并且数据发送的混合。在UDP中,它可能更合理,但我仍然建议反对它。