ASIO IO完成回调订单与实际IO操作的顺序
ASIO IO completion callbacks order vs the order of actual IO operations
从实现中可以明显看出,IO完成回调在单个线程模式下运行时以与实际的IO操作相同的顺序调用,但是我找不到文档的各个部分确认这一点。它在任何地方都明确书写吗?
io-object类上所有async_xxx方法的文档具有这样的段落:
无论异步操作是否立即完成,将不会从此功能中调用处理程序。处理程序的调用将以的方式进行,等同于使用
boost::asio::io_service::post()
。
查看boost::asio::io_service::post()
...
此功能用于要求io_service执行给定的处理程序,但不允许io_service从此功能内部调用处理程序。
io_service保证只有在
run()
,run_one()
,poll()
或poll_one()
成员功能的线程中调用处理程序。
这就是您保证的全部范围。
如果您的代码依赖于异步事件的时间顺序,则它不是异步代码。
即使是run_one()
的文档也无法保证处理程序将派遣:
run_one()功能块,直到派遣一个处理程序,或直到停止io_service为止。
如果您必须对单个异步操作进行序列(例如读取),那么您必须要:
从第一个处理程序或
启动第二个操作在操作的处理程序出色时保留标志集,并且仅在标志为false时启动另一个操作。
相关文章:
- 为什么在popback()操作之后,它仍然打印完整的矢量
- Seg Fault Issue C++ (file IO / getline)
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 为什么在读取文件大小时文件IO速度会发生变化
- 对字符串进行位操作
- 我可以在 C++ 中的函数体之外进行操作吗?
- MPI突然停止了对多个核心的操作
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 对字符数组中的元素执行逐位操作
- 如何在directx/c++中进行平移/缩放操作
- 逐位操作的隐式类型转换
- 为什么一个向量上的多线程操作很慢
- 如何检测函数是否执行IO操作
- 在C++程序中,IO/文件 IO 操作的优先级是否高于 CPU 操作
- ASIO IO完成回调订单与实际IO操作的顺序
- 哪些 IO 操作会导致在使用套接字时将完成数据包发送到完成端口
- 在二进制模式下使用格式化的IO操作
- 对于这种类型的二进制IO操作,持久性会是一个问题吗
- Openmp与密集IO操作,如何提高速度