提升:在异步调用中使用多次递归是否安全?

Vla*_*tiy 5 c++ recursion boost-asio

我是asio框架的新手,所以请善待.我调查了几个boost asio示例,发现人们使用这样的异步调用:

void read()
{
    async_read(socket_, boost::asio::buffer(&user_[0], user_.size()),
       boost::bind(&Connection::handle_user_read, this,
       placeholders::error, placeholders::bytes_transferred));
}
void handle_user_read(...)
{
    ...
    read();
    ...
}
Run Code Online (Sandbox Code Playgroud)

我认为这段代码不安全,因为它使用了多次递归.因此,当由于调用堆栈溢出而执行大量读取操作时,无法使用它.我在这方面并不是100%肯定,也无法找到其他人的类似想法.

有谁能详细解释一下这个?

Min*_*eat 5

我想 read() 函数只是将新的异步读取请求添加到 I/O 队列并立即退出,因此此代码中没有递归。

我的意思是, read() 不直接调用 Connection::handle_user_read 。它只是函数指针存储在 IO 队列中。当一些新数据块可用时,外部代码将异步调用此函数。