GNU C 和 GNU C 中 64 位元電腦上的哪些類型本質上是原子的?
與C11 及更高版本或C 11 及更高版本不同,它們提供使用_Atomic 或std::atomic 類型保證原子性,C 和C 語言標準本身不保證原子讀取和寫道。相反,原子性等級取決於編譯器實作和目標體系結構。
在 x86-64 處理器上運行 Linux 的 64 位元電腦上,不同資料類型的自然原子性會有所不同。 GNU C 和 GNU C 編譯器( gcc 和 g )為特定類型提供一定程度的原子性。
原子型態:
-
int:頭檔中的typedefword _Atomic_word;
-
__sig_atomic_t:頭檔中的typedef;表示int是原子的。定義原子整數類型,確保在存在非同步中斷的情況下進行原子讀寫。
非原子型數:
- int64_t(長long)
- int64_t(長long)
無符號long長) 雙精確度(64 位元) 長雙(也64位)
附加說明:
-
- 原子性是指原子讀寫,而非原子遞增、遞減或複合賦增值。
- 需要注意的是,雖然某些類型在某些情況下保證是原子的上下文(例如, volatile sig_atomic_t 對於信號來說是原子的),對於線程來說它們不一定是原子的。
- 編譯器可能會以打破原子性假設的方式最佳化程式碼,特別是如果這些假設沒有明確語言標準中規定。
為了確保線程安全的並發訪問,明確使用 _Atomic 或 std::atomic 類型是推薦。
以上是哪些資料型別在 64 位元 GNU C/C 系統上本質上是原子的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!