[英]Serialize io_service::post() execution with io_service::run() called only in a single thread
如果我只在一個線程中運行io_service::run()
, io_service::post()
調用是按照我請求它們執行的相同順序執行的,或者它們可以按任意順序執行,我仍然需要使用用於強制序列化執行的strand
?
之前已經處理過這個問題,例如
它清楚地說明了
如果滿足以下任一條件:
s.post(a)
發生在s.post(b)
之前s.post(b)
- ...
然后
asio_handler_invoke(a1, &a1)
發生在asio_handler_invoke(b1, &b1)
。
請注意,單個IO線程會創建隱式鏈 (docs)
注意關於另一個答案:當在完成異步操作時隱式完成處理程序調用時,這當然不成立。
請注意,在以下情況中:
async_op_1(..., s.wrap(a)); async_op_2(..., s.wrap(b));
第一個異步操作的完成將執行
s.dispatch(a)
,第二個將執行s.dispatch(b)
,但未指定執行這些操作的順序。 也就是說,你無法說明一個是否發生在另一個之前 。 因此,不滿足上述條件,也不進行訂購保證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.