2
如果我直接調用boost :: asio :: async_write/async_read,數據是否會被排序?或者在我再次調用寫/讀之前需要等待回調?boost.asio tcp套接字,是否會訂購異步操作?
在此先感謝!
如果我直接調用boost :: asio :: async_write/async_read,數據是否會被排序?或者在我再次調用寫/讀之前需要等待回調?boost.asio tcp套接字,是否會訂購異步操作?
在此先感謝!
數據不保證是有序的,如果您正在使用這些函數,則應在再次寫入之前等待回調。
(討論在ASYNC_WRITE而言,也適用於async_read)
由於ASYNC_WRITE在多次調用基礎流的async_write_some功能方面實現的,這些呼叫是不是原子。每次調用都會嘗試將數據寫入流中,並有一個內部回調來處理部分操作,實際上等待完成,因爲您可能自己編寫代碼。所以如果你不等待完成,你可能會很容易地得到混合數據。
您還需要考慮線程。如果多次在流上調用async_x,最終可能會在不同線程的同一基礎流上執行併發操作,從而導致未定義的行爲。