C++ 庫 - <atomic>



簡介

這些型別封裝了一個值,其訪問保證不會導致資料競爭,可用於在不同執行緒之間同步記憶體訪問,原子庫提供用於細粒度原子操作的元件,允許無鎖併發程式設計。每個原子操作對於涉及同一物件的任何其他原子操作都是不可分割的。

原子型別

序號 成員型別及定義
1 atomic

原子類模板和針對 bool、整數和指標型別的特化

C 風格原子型別

以下是原子型別,也在此標頭檔案中定義。

包含型別 原子型別 描述
bool atomic_bool
char atomic_char

用於基本整數型別的原子。

這些或者是相應`atomic`類模板完整特化的typedef,或者此類特化的基類。

signed char atomic_schar
unsigned char atomic_uchar
short atomic_short
unsigned short atomic_ushort
int atomic_int
unsigned int atomic_uint
long atomic_long
unsigned long atomic_ulong
long long atomic_llong
unsigned long long atomic_ullong
wchar_t atomic_wchar_t
char16_t atomic_char16_t
char32_t atomic_char32_t
intmax_t atomic_intmax_t

用於基於寬度的整數(在<cinttypes>中定義)的原子。

每個都是上述基本整數型別原子或具有擴充套件整數型別的`atomic`類模板完整特化的別名。

其中N是8、16、32、64或庫支援的任何其他型別寬度。

uintmax_t atomic_uintmax_t
int_leastN_t atomic_int_leastN_t
uint_leastN_t atomic_uint_leastN_t
int_fastN_t atomic_int_fastN_t
uint_fastN_t atomic_uint_fastN_t
intptr_t atomic_intptr_t
uintptr_t atomic_uintptr_t
size_t atomic_size_t
ptrdiff_t atomic_ptrdiff_t

原子型別的操作

&
序號 操作及定義
1 atomic_is_lock_free

用於檢查原子型別的操作是否為無鎖的

2 atomic_store & atomic_store_explicit

它自動將原子物件的value替換為非原子引數

3 atomic_load & atomic_load_explicit

它以原子方式獲取儲存在原子物件中的值

4 atomic_exchange & atomic_exchange_explicit

它以原子方式將原子物件的value替換為非原子引數,並返回原子的舊值

5 atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicit

它以原子方式將原子物件的value與非原子引數進行比較,如果相等則執行原子交換,否則執行原子載入

6 atomic_fetch_add & atomic_fetch_add_explicit

它將非原子值新增到原子物件,並獲取原子的前一個值

7 atomic_fetch_sub & atomic_fetch_sub_explicit

它從原子物件中減去非原子值,並獲取原子的前一個值

8 atomic_fetch_and & atomic_fetch_and_explicit

它將原子物件替換為與非原子引數的邏輯 AND 的結果,並獲取原子的前一個值

9 atomic_fetch_or & atomic_fetch_or_explicit

它將原子物件替換為與非原子引數的邏輯 OR 的結果,並獲取原子的前一個值

10 atomic_fetch_xor & atomic_fetch_xor_explicit

它將原子物件替換為與非原子引數的邏輯 XOR 的結果,並獲取原子的前一個值

標誌型別和操作

序號 標誌型別及定義
1 atomic_flag

無鎖布林原子型別

2 atomic_flag_test_and_set & atomic_flag_test_and_set_explicit

它將標誌原子設定為 true 並返回其前一個值

3 atomic_flag_clear & atomic_flag_clear_explicit

它將標誌的值原子設定為 false

廣告