關於boost.asio複合操作有幾點不清楚,這些操作在官方文檔和我已閱讀的主題中的各種線程中都不清楚。boost.asio在單線程和多線程進程中的複合操作
場景
兩個boost::asio::async_write
請求A和B被安排在一個TCP套接字。
問題
- 在單線程處理中,可能發生的是A被同時地B所執行?也就是說,A的
async_write_some
的中間調用與B的調用(基本上呈現損壞的流)混合? - 如果(1)的答案爲是,那麼
io_service::strand
是否解決了單線程過程中的問題?它是否確保在B之前完成A的所有中間呼叫開始? - 請問
io_service.strand
是否解決了(1)在多線程進程中,當多個線程執行io_service::run()
?它是否確保在B之前完成A的所有中間呼叫開始?
文檔非常清晰,真的。它可能看起來不清楚,但這是因爲你腦海中存在一些「不清楚的主題」,例如proactor模式!無論如何,topnotch SO問題/答案,幫助我在我自己的學習曲線之一是[那個](http://stackoverflow.com/questions/15568100/confused-when-boostasioio-service-run-method-blocks-unblocks ?RQ = 1)。 –
This [answer](http://stackoverflow.com/a/7756894/1053968)通過使用一個隊列來序列化多個'async_write()'操作,並用一個異步調用鏈處理隊列一個['strand'](http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/io_service__strand.html),滿足'async_write()'的要求和流的線程安全。 –