【发布时间】:2009-12-06 02:03:35
【问题描述】:
如果我一个接一个地调用 boost::asio::async_write/async_read,数据会被排序吗?或者在我再次调用写/读之前我需要等待回调吗?
提前致谢!
【问题讨论】:
标签: c++ boost-asio
如果我一个接一个地调用 boost::asio::async_write/async_read,数据会被排序吗?或者在我再次调用写/读之前我需要等待回调吗?
提前致谢!
【问题讨论】:
标签: c++ boost-asio
数据不保证是有序的,如果你正在使用这些函数,你应该在再次写入之前等待回调。
(关于async_write的讨论,也适用于async_read)
因为 async_write 是根据对底层流的 async_write_some 函数的多次调用来实现的,所以这些调用不是原子的。每个调用都会尝试将数据写入流,并有一个内部回调来处理部分操作,实际上是在等待完成,就像您自己编写代码一样。因此,如果您不等待完成,您很容易得到混合数据。
您还需要考虑线程。如果您在流上多次调用 async_x,您最终可能会在不同线程中对同一底层流进行并发操作,从而导致未定义的行为。
【讨论】: