與語言標準不同,GNU C 和 GNU C 編譯器是基於特定體系結構處理原子性。雖然 C11 和 C 11 引入了 _Atomic 類型和 std::atomic 。分別類型,本文僅關注自然原子讀取和寫入,不包括原子遞增、遞減或複合賦值。
在 64 位元 Linux 上具有 x86-64處理器的計算機,以下類型具有天然的原子讀取和寫道:
但是,值得注意的是,根據語言標準,即使這些類型也不是絕對自動原子的。
主要有兩個「原子」的意思:
僅僅因為類型在硬體層級自然是原子的,並不意味著編譯器將始終使用原子指令來存取它。最佳化可能會導致非原子訪問,即使對於已知在目標硬體上是原子的資料類型也是如此。
例如,從 x86 上的 32 位元整數載入是原子的,但編譯器可能會使用不保證原子性的 16 位元部分載入或儲存。
綜上所述,C 或 C 中沒有型C 在 64 位元電腦上絕對是自動原子的。為了確保原子訪問,使用 _Atomic 或 std::atomic 類型或依賴文件來驗證特定架構和編譯器的原子保證至關重要。
以上是哪些 C 和 C 型在 64 位元 x86-64 系統上表現出自然的原子行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!