2015-07-20 59 views

回答

3

该问题已经过处理,例如,

它明确规定了

如果任一下列条件: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),但顺序 执行的那些是未指定。也就是说,你不能说明是否有一个 发生在另一个之前。因此以上条件均不符合,并且不作出订购保证。

    +0

    ...但仍保证调用不是并发的。 (对吗?) – Zero

    +0

    @零仅在一个(隐含的)链上。也就是说,当你只有一个线程'run()' - 服务或通过'strand'显式序列化操作 – sehe

    相关问题