1
如果我有io_service::run()
运行只在一个线程,io_service::post()
调用执行顺序我要求他们是执行,还是可以按任意顺序执行,我仍然需要使用strand
来强制序列化执行?Serialize io_service :: post()执行io_service :: run()仅在单个线程中调用
如果我有io_service::run()
运行只在一个线程,io_service::post()
调用执行顺序我要求他们是执行,还是可以按任意顺序执行,我仍然需要使用strand
来强制序列化执行?Serialize io_service :: post()执行io_service :: run()仅在单个线程中调用
该问题已经过处理,例如,
它明确规定了
如果任一下列条件:
s.post(b)
之前发生,
s.post(a)
...然后
asio_handler_invoke(a1, &a1)
发生在asio_handler_invoke(b1, &b1)
之前。
请注意,一个IO线程创建隐含链(文档)
注意关于对方的回答:当然这不,当处理器调用是持有在完成异步操作时隐式完成。
注意,在下面的情况:
async_op_1(..., s.wrap(a)); async_op_2(..., s.wrap(b));
第一异步操作的完成将执行
s.dispatch(a)
,和 第二将执行s.dispatch(b)
,但顺序 执行的那些是未指定。也就是说,你不能说明是否有一个 发生在另一个之前。因此以上条件均不符合,并且不作出订购保证。
...但仍保证调用不是并发的。 (对吗?) – Zero
@零仅在一个(隐含的)链上。也就是说,当你只有一个线程'run()' - 服务或通过'strand'显式序列化操作 – sehe