如果我对async_read进行两次调用,那么只有在处理完第一次调用之后,才会处理第二次调用,这是否安全

Is it safe to assume that if I make two calls to async_read, the second call will be processed only after the first is processed?

本文关键字:调用 处理 第一次 之后 是否 安全 第二次 read async 如果 两次      更新时间:2023-10-16

我正在通过网络发送一些数据,每个数据段都有一个由两部分组成的头:

  1. 数据类型
  2. 数据段其余部分的长度

我将数据类型读取到一个变量中,将长度读取到另一个变量,从而读取两个async_read调用。

我知道我可以链接async_read,一切都应该正常,即首先读取消息类型,当它被读取时,在其async_readhandler中,调用async_reads获取数据长度。

但是,如果我不做这样的链接,只做async_read(数据类型)呢;async_read(数据长度);。Boost是否只会在第一个async_read()完成后才处理第二个?

async_read是在同一个tcp套接字和同一个io_service对象上调用的。

不,这不是一个安全的假设。async_read()被实现为对async_read_some()的多个调用,因此读取可能最终被交错。