在他的“原子武器”演講中, Herb Sutter 演示了一個示例,其中主線程使用memory_order_seq_cst 設定停止標誌,並且多個工作線程使用以下命令檢查此標誌記憶體順序放寬。 Sutter 解釋說,由於延遲影響可以忽略不計,因此使用 memory_order_relaxed 進行檢查是可以接受的。不過,他建議使用 memory_order_seq_cst 來進行設定標誌的操作,但沒有提供具體原因。
理解記憶體排序的概念在這裡至關重要。記憶體順序定義了原子操作提供的可見性和同步保證。在此範例中,使用 memory_order_seq_cst 設定標誌可確保以下內容:
使用時考慮到載入操作使用了 memory_order_relaxed,寫入操作的 memory_order_seq_cst 可能看起來過多,但它實際上沒有顯著的效能影響。無論使用的記憶體順序如何,實作都需要使原子儲存在合理的時間內可見。
雖然使用memory_order_seq_cst 進行寫入操作的延遲影響很小,它提供了幾個好處:
總而言之,在本例中使用memory_order_seq_cst設定停止標誌是不可行的用於效能最佳化,但要確保正確性和線程安全。雖然 memory_order_relaxed 對於載入操作是可以接受的,但使用 memory_order_seq_cst 進行寫入操作可以在不影響效能的情況下提供額外的保證。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3