【发布时间】:2013-12-04 09:45:48
【问题描述】:
我不确定与股线相关的一个细节。
假设以下情况:两个独立的对象,每个对象都有自己的链。并且每条链都与一个常见的 io_service 相关。每个对象都使用他的链来发布和包装异步操作。如果我在多个线程上有这个(唯一的)io_service .run()'ing,我不确定是否会发生以下情况:
由其中一个对象发布和异步包装的所有操作将非同时执行。因此,与其中一个对象相关的所有操作都将按顺序执行(发布的操作将按照与发布的顺序相同的顺序执行。包装的异步操作将按未指定的顺序执行,因为它们是异步的,但仍按顺序执行)。
源自不同对象的两个操作(因此从与同一 io_service 相关的不同 strand 对象发布或包装)可以同时执行。
-
总而言之,每个对象将依次执行其发布和包装的处理程序,但从不同对象(链)发布和包装的处理程序将同时执行。
+-----------------+ +-----------------+ | Obj1 | | Obj2 | | +-------------+ | | +-------------+ | | | Strand_1 | | | | Strand_2 | | | +-------------+ | | +-------------+ | +--------+--------+ +-------+---------+ | | +--------+ +-------+ | | +----+--+----+ | io_service | +------------+ | | +--------+-------+ | | Thread1 Thread_2 io_service.run() io_service.run()
我说的对吗?
谢谢
【问题讨论】:
标签: c++ multithreading asynchronous boost-asio