在原子記憶體操作的上下文中,std::atomic 提供了順序一致性保證它的商店運作。這意味著使用 std::atomic::store 執行的任何寫入對於在同一位置執行的任何後續記憶體操作都是可見的。
的實作為了實現順序一致性,std::atomic::store 通常在 x86 和 x86_64 架構上使用 XCHG 指令。該指令執行原子交換操作,其中儲存在記憶體位置中的值被新值取代。
問題是為什麼 XCHG 優於簡單的儲存操作和記憶體屏障。雖然普通儲存可確保資料寫入內存,但它不能保證寫入對其他執行緒或處理器可見。記憶體屏障,例如 asm 易失性("" ::: "記憶體"),強制處理器刷新任何掛起的寫入緩衝區並同步不同處理器之間的記憶體操作。
XCHG 被認為是實現順序一致性的合適選擇有幾個原因std::atomic::store:
雖然 XCHG 是 std::atomic 中順序一致性的常見實作選擇: :store,還有可以使用的替代方法。一種選擇是使用 MOV 指令,後接 MFENCE 指令。 MOV 執行常規儲存操作,而 MFENCE 充當完整記憶體屏障。某些編譯器在某些情況下會使用這種方法。
總之,在std::atomic::store 中使用XCHG 實現順序一致性提供了一種可靠且高效的方法,以確保寫入操作在多個執行緒和處理器上可見且正確排序。
以上是為什麼有順序一致性的「std::atomic::store」會在 x86 上使用 XCHG?的詳細內容。更多資訊請關注PHP中文網其他相關文章!