如果io_service::run()
只在一个线程中运行,io_service::post()
调用是按照我请求执行的相同顺序执行的,或者它们可以在任意顺序,我仍然需要使用strand
强制序列化执行?
答案 0 :(得分:3)
此问题已经过处理过,例如
它清楚地说明了
如果满足以下任一条件:
- 之前
s.post(a)
发生在[{1}}- ...
然后
s.post(b)
发生在asio_handler_invoke(a1, &a1)
之前。
请注意,单个IO线程会创建隐式链(docs)
注意关于另一个答案:当然,在完成异步操作时隐式完成处理程序调用时,这不会成立。
请注意,在以下情况中:
asio_handler_invoke(b1, &b1)
第一次异步操作的完成将执行
async_op_1(..., s.wrap(a)); async_op_2(..., s.wrap(b));
,和 第二个将执行s.dispatch(a)
,但它们的顺序 执行是未指定的。也就是说,你无法说明是否一个 发生在之前。因此,没有满足上述条件 没有订购保证。