首頁 > 後端開發 > C++ > 哪些 C 和 C 型在 64 位元 x86-64 系統上表現出自然的原子行為?

哪些 C 和 C 型在 64 位元 x86-64 系統上表現出自然的原子行為?

Mary-Kate Olsen
發布: 2024-12-14 07:40:11
原創
982 人瀏覽過

Which C and C   Types Exhibit Naturally Atomic Behavior on a 64-Bit x86-64 System?

哪些 C 和 C 型在 64 位元電腦上本質上是原子性的?

與語言標準不同,GNU C 和 GNU C 編譯器是基於特定體系結構處理原子性。雖然 C11 和 C 11 引入了 _Atomic 類型和 std::atomic 。分別類型,本文僅關注自然原子讀取和寫入,不包括原子遞增、遞減或複合賦值。

64 位元 Linux 電腦上的原子性保證

在 64 位元 Linux 上具有 x86-64處理器的計算機,以下類型具有天然的原子讀取和寫道:

  • int
  • _Atomic_word

但是,值得注意的是,根據語言標準,即使這些類型也不是絕對自動原子的。

理解原子性

主要有兩個「原子」的意思:

  • 關於訊號的原子:確保在不同指令執行期間呼叫的訊號處理程序只會看到易失性sig_atomic_t 變數的舊值或新值。
  • 相對於執行緒的原子性:保證並發存取物件將導致所有執行緒看到正確的值。為了實現這一點,_Atomic 或 std::atomic 類型是必要的。

編譯器最佳化和原子性

僅僅因為類型在硬體層級自然是原子的,並不意味著編譯器將始終使用原子指令來存取它。最佳化可能會導致非原子訪問,即使對於已知在目標硬體上是原子的資料類型也是如此。

例如,從 x86 上的 32 位元整數載入是原子的,但編譯器可能會使用不保證原子性的 16 位元部分載入或儲存。

結論

綜上所述,C 或 C 中沒有型C 在 64 位元電腦上絕對是自動原子的。為了確保原子訪問,使用 _Atomic 或 std::atomic 類型或依賴文件來驗證特定架構和編譯器的原子保證至關重要。

以上是哪些 C 和 C 型在 64 位元 x86-64 系統上表現出自然的原子行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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