首頁 > 後端開發 > C++ > 主體

為什麼有順序一致性的「std::atomic::store」會在 x86 上使用 XCHG?

Susan Sarandon
發布: 2024-11-19 06:28:02
原創
513 人瀏覽過

Why does `std::atomic::store` with sequential consistency use XCHG on x86?

為什麼具有順序一致性的 std::atomic 儲存使用 XCHG?

在原子記憶體操作的上下文中,std::atomic 提供了順序一致性保證它的商店運作。這意味著使用 std::atomic::store 執行的任何寫入對於在同一位置執行的任何後續記憶體操作都是可見的。

XCHG 與使用記憶體屏障的儲存

的實作為了實現順序一致性,std::atomic::store 通常在 x86 和 x86_64 架構上使用 XCHG 指令。該指令執行原子交換操作,其中儲存在記憶體位置中的值被新值取代。

問題是為什麼 XCHG 優於簡單的儲存操作和記憶體屏障。雖然普通儲存可確保資料寫入內存,但它不能保證寫入對其他執行緒或處理器可見。記憶體屏障,例如 asm 易失性("" ::: "記憶體"),強制處理器刷新任何掛起的寫入緩衝區並同步不同處理器之間的記憶體操作。

使用XCHG

XCHG 被認為是實現順序一致性的合適選擇有幾個原因std::atomic::store:

  1. 原子性質: XCHG 是一個原子指令,這意味著它作為單一不可分割的操作執行。這確保了寫入操作和前一個值的載入不會與其他處理器或執行緒發生任何交錯。
  2. 強記憶體屏障: XCHG 指令充當 x86 上的完整記憶體屏障架構。它強制處理器刷新其寫入緩衝區並使記憶體位置的任何快取副本無效。這保證了 XCHG 所做的任何更改對於所有後續記憶體操作都是可見的。
  3. 效能注意事項:在某些 CPU(例如 Intel Skylake)上,使用 XCHG 實現順序一致性可以優於使用 XCHG 實現順序一致性。存儲和內存屏障的組合。 XCHG 避免了與明確記憶體屏障相關的開銷,減少了延遲並提高了效能。

替代方法

雖然 XCHG 是 std::atomic 中順序一致性的常見實作選擇: :store,還有可以使用的替代方法。一種選擇是使用 MOV 指令,後接 MFENCE 指令。 MOV 執行常規儲存操作,而 MFENCE 充當完整記憶體屏障。某些編譯器在某些情況下會使用這種方法。

結論

總之,在std::atomic::store 中使用XCHG 實現順序一致性提供了一種可靠且高效的方法,以確保寫入操作在多個執行緒和處理器上可見且正確排序。

以上是為什麼有順序一致性的「std::atomic::store」會在 x86 上使用 XCHG?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板