為什麼std::atomic 的儲存採用XCHG 來實現順序一致性
在x86 和x86_64 架構的std::atomic 上下文中std::atomic ,具有順序一致性的儲存操作(std::memory_order_seq_cst) 使用XCHG而不是使用內存屏障作為實現順序釋放語義的技術的簡單存儲。
順序一致性和xchg
順序一致性規定所有記憶體操作似乎都以某種方式執行連續順序,並且該順序對於所有執行緒都是相同的。 XCHG 是一種以原子方式交換兩個操作數的值的 x86 指令,本質上滿足了這種順序一致性要求。透過使用 XCHG 執行寫入操作,std::atomic 確保儲存在執行順序的特定點對所有執行緒全域可見,從而防止後續操作重新排序。
mov- store mfence 與XCHG
雖然簡單的mov-store 後跟內存柵欄(例如mfence)理論上可以提供釋放從語義上來說,它對於順序釋放儲存操作來說是不夠的。 MFENCE 是建立記憶體屏障的記憶體柵欄指令,可確保先前的寫入作業在繼續之前提交到記憶體。但是,它不會阻止後續載入操作在發布儲存體之前重新排序。
效能注意事項
順序發布的 mov-store mfence 和 XCHG 之間的選擇儲存作業涉及效能權衡。
實作詳細資訊
在實務中,std::atomic 具有順序一致性的儲存的具體實作因編譯器和硬體架構而異。
隱式取得柵欄
x86 儲存具有隱含取得柵欄的說法是不正確的。 x86 上的儲存具有釋放語義,而不是獲取語義。獲取語義通常使用記憶體屏障(例如 mfence)或帶有 std::memory_order_acquire 語義的原子讀取操作來強制執行。以上是為什麼 `std::atomic` 的儲存使用 XCHG 來實現 x86 上的順序一致性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!