atomic
結構
描述物件,該物件會在 atomic
類型的 Ty
預存值上執行作業。
語法
template <class Ty>
struct atomic;
成員
member | 描述 |
---|---|
建構函式 | |
atomic |
建構不可部分完成物件。 |
運算子 | |
atomic::operator Ty |
讀取並傳回預存值。 (atomic::load ) |
atomic::operator= |
使用指定的值來取代預存值。 (atomic::store ) |
atomic::operator++ |
遞增預存值。 僅供整數和指標特製化使用。 |
atomic::operator+= |
將指定的值加入預存值。 僅供整數和指標特製化使用。 |
atomic::operator-- |
遞減預存值 。 僅供整數和指標特製化使用。 |
atomic::operator-= |
將預存值減去指定的值。 僅供整數和指標特製化使用。 |
atomic::operator&= |
在指定的值和預存值上執行位 「and」 (& )。 僅供整數特製化使用。 |
atomic::operator|= |
在指定的值和預存值上執行位 「or」 (| )。 僅供整數特製化使用。 |
atomic::operator^= |
在指定的值和預存值上執行位“獨佔或” (^ )。 僅供整數特製化使用。 |
函數 | |
compare_exchange_strong |
對 this 執行 atomic_compare_and_exchange 作業,並傳回結果。 |
compare_exchange_weak |
對 this 執行 weak_atomic_compare_and_exchange 作業,並傳回結果。 |
fetch_add |
將指定的值加入預存值。 |
fetch_and |
在指定的值和預存值上執行位 「and」 (& )。 |
fetch_or |
在指定的值和預存值上執行位 「or」 (| )。 |
fetch_sub |
將預存值減去指定的值。 |
fetch_xor |
在指定的值和預存值上執行位“獨佔或” (^ )。 |
is_lock_free |
指定上的this 作業是否atomic 為無鎖定。 atomic 如果沒有該類型上的作業使用鎖定,則類型是atomic 無鎖定的。 |
load |
讀取並傳回預存值。 |
store |
使用指定的值來取代預存值。 |
備註
Ty
類型必須是「完整可複製的」。 也就是說,使用 memcpy
來複製其位元組必須產生與原始物件相等的有效 Ty
物件。 compare_exchange_weak
和 compare_exchange_strong
成員函式會用來memcmp
判斷兩個Ty
值是否相等。 這些函式不會使用 Ty
定義的 operator==
。 atomic
的成員函式會使用 memcpy
來複製 Ty
類型的值。
所有指標類型都可以進行部分特製化 atomic<Ty*>
。 特製化可以將位移加入 Managed 指標值,或從中減去位移。 算術運算會接受 ptrdiff_t
類型的引數,並根據 Ty
大小,將該引數調整為與一般位址算術一致。
每個整數類型都可以進行特製化,但 bool
除外。 每個特製化都會提供一組豐富的方法來進行不可部分完成算術和邏輯作業。
atomic<char>
atomic<signed char>
atomic<unsigned char>
atomic<char16_t>
atomic<char32_t>
atomic<wchar_t>
atomic<short>
atomic<unsigned short>
atomic<int>
atomic<unsigned int>
atomic<long>
atomic<unsigned long>
atomic<long long>
atomic<unsigned long long>
整數特製化衍生自對應的 atomic_integral
類型。 例如,atomic<unsigned int>
衍生自 atomic_uint
。
需求
標頭: <atomic>
命名空間:std
atomic::atomic
建構不可部分完成物件。
atomic();
atomic( const atomic& );
atomic( Ty Value ) noexcept;
參數
Value
初始化值。
備註
不可複製或移動不可部分完成的物件。
具現化 atomic<Ty>
的物件只能由採用 型 Ty
別自變數的建構函式初始化,而不是使用匯總初始化。 不過, atomic_integral
物件只能使用匯總初始化來初始化。
atomic<int> ai0 = ATOMIC_VAR_INIT(0);
atomic<int> ai1(0);
atomic::operator Ty
指定給樣本之型別的運算子, atomic<Ty>
。 擷取 中的 *this
預存值。
atomic<Ty>::operator Ty() const volatile noexcept;
atomic<Ty>::operator Ty() const noexcept;
備註
此運算子會memory_order_seq_cst
memory_order
套用 。
atomic::operator=
儲存指定的值。
Ty operator=(
Ty Value
) volatile noexcept;
Ty operator=(
Ty Value
) noexcept;
參數
Value
Ty
物件。
傳回值
傳回 Value
。
atomic::operator++
遞增預存值。 僅供整數和指標特製化使用。
Ty atomic<Ty>::operator++(int) volatile noexcept;
Ty atomic<Ty>::operator++(int) noexcept;
Ty atomic<Ty>::operator++() volatile noexcept;
Ty atomic<Ty>::operator++() noexcept;
傳回值
前兩個運算符會傳回遞增值;最後兩個運算符會傳回遞增之前的值。 運算子會memory_order_seq_cst
memory_order
使用 。
atomic::operator+=
將指定的值加入預存值。 僅供整數和指標特製化使用。
Ty atomic<Ty>::operator+=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
Ty Value
) noexcept;
參數
Value
整數或指標值。
傳回值
Ty
物件,包含加法的結果。
備註
這個運算子會使用 memory_order_seq_cst
memory_order
。
atomic::operator--
遞減預存值 。 僅供整數和指標特製化使用。
Ty atomic<Ty>::operator--(int) volatile noexcept;
Ty atomic<Ty>::operator--(int) noexcept;
Ty atomic<Ty>::operator--() volatile noexcept;
Ty atomic<Ty>::operator--() noexcept;
傳回值
前兩個運算符會傳回遞減值;最後兩個運算符會傳回遞減前的值。 運算子會memory_order_seq_cst
memory_order
使用 。
atomic::operator-=
將預存值減去指定的值。 僅供整數和指標特製化使用。
Ty atomic<Ty>::operator-=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
Ty Value
) noexcept;
參數
Value
整數或指標值。
傳回值
Ty
物件,包含減法的結果。
備註
這個運算子會使用 memory_order_seq_cst
memory_order
。
atomic::operator&=
在指定的值與預存值*this
上執行位 「and」 (&
) 。 僅供整數特製化使用。
atomic<Ty>::operator&= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator&= (
Ty Value
) noexcept;
參數
Value
型別 Ty
的值。
傳回值
位 “and” (&
) 的結果。
備註
這個運算符會執行讀取-修改-寫入作業,以的位 「and」 (&
) 取代 的預存值*this
,以及 儲存在 中的目前值,在 *this
的條件約束memory_order
memory_order_seq_cst
Value
內。
atomic::operator|=
在指定的值和 的預存值*this
上執行位 「or」 (|
)。 僅供整數特製化使用。
atomic<Ty>::operator|= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
Ty Value
) noexcept;
參數
Value
型別 Ty
的值。
傳回值
位 “or” (|
) 的結果。
備註
這個運算符會執行讀寫作業,以位 「or」 (|
) 取代 的預存值*this
,以及儲存在 *this
條件約束條件約束memory_order
memory_order_seq_cst
內的目前Value
值。
atomic::operator^=
在指定的值與預存的值*this
上執行位「獨佔或」 (^
) 。 僅供整數特製化使用。
atomic<Ty>::operator^= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator^= (
Ty Value
) noexcept;
參數
Value
型別 Ty
的值。
傳回值
位 “exclusive or” (^
) 的結果。
備註
這個運算符會執行讀取-修改-寫入作業,將的預存值*this
取代為的位「獨佔或」(^
)Value
,以及儲存在*this
條件約束條件約束memory_order_seq_cst
memory_order
內的目前值。
atomic::compare_exchange_strong
在上 *this
執行不可部分完成的比較和交換作業。
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) volatile noexcept;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) noexcept;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) noexcept;
參數
Exp
型別 Ty
的值。
Value
型別 Ty
的值。
Order1
第一個 memory_order
自變數。
Order2
第二個 memory_order
引數。
傳回值
表示數值比較結果的 bool
。
備註
這個不可部分完成的比較和交換作業會比較儲存在 與中的*this
Exp
值。 如果值相等,作業會使用讀寫作業取代 儲存在 中的*this
Value
值,並套用 所Order1
指定的記憶體順序條件約束。 如果值不相等,作業會使用儲存在 中的 *this
值來取代 Exp
並套用 所 Order2
指定的記憶體順序條件約束。
沒有第二memory_order
個的多載會使用以 值Order1
為基礎的隱含 Order2
。 如果 Order1
為 memory_order_acq_rel
,則 Order2
為 memory_order_acquire
。 如果 Order1
為 memory_order_release
,則 Order2
為 memory_order_relaxed
。 在其他所有情況下, Order2
都等於 Order1
。
對於採用兩個 memory_order
參數的多載,的值 Order2
不得為 memory_order_release
或 memory_order_acq_rel
,且不得大於的值 Order1
。
atomic::compare_exchange_weak
在上 *this
執行弱式不可部分完成比較和交換作業。
bool compare_exchange_weak(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) volatile noexcept;
bool compare_exchange_weak(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) noexcept;
bool compare_exchange_weak(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_weak(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) noexcept;
參數
Exp
型別 Ty
的值。
Value
型別 Ty
的值。
Order1
第一個 memory_order
自變數。
Order2
第二個 memory_order
引數。
傳回值
表示數值比較結果的 bool
。
備註
這個不可部分完成的比較和交換作業會比較儲存在 與中的*this
Exp
值。 如果值相等,作業會使用讀寫作業取代 儲存在 中的*this
Value
值,並套用 所Order1
指定的記憶體順序條件約束。 如果值不相等,作業會使用儲存在 中的 *this
值來取代 Exp
並套用 所 Order2
指定的記憶體順序條件約束。
如果比較的值相等,則「弱式」不可部分完成比較和交換作業會執行交換。 如果值不相等,則作業不保證會執行交換。
沒有第二memory_order
個的多載會使用以 值Order1
為基礎的隱含 Order2
。 如果 Order1
為 memory_order_acq_rel
,則 Order2
為 memory_order_acquire
。 如果 Order1
為 memory_order_release
,則 Order2
為 memory_order_relaxed
。 在其他所有情況下, Order2
都等於 Order1
。
對於採用兩個 memory_order
參數的多載,的值 Order2
不得為 memory_order_release
或 memory_order_acq_rel
,且不得大於的值 Order1
。
atomic::exchange
使用指定的值來取代的預存值 *this
。
Ty atomic<Ty>::exchange(
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::exchange(
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
參數
Value
型別 Ty
的值。
Order
memory_order
。
傳回值
交換之前 *this
的儲存值。
備註
此作業會執行讀取-修改-寫入作業, Value
以取代 儲存在 中的 *this
值,其位於 所 Order
指定的記憶體條件約束內。
atomic::fetch_add
擷取儲存在 中的 *this
值,然後將指定的值新增至預存值。
Ty atomic<Ty>::fetch_add (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_add (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
參數
Value
型別 Ty
的值。
Order
memory_order
。
傳回值
Ty
物件,包含加入之前儲存在中的*this
值。
備註
fetch_add
方法會執行讀寫作業,以不可部分完成地新增Value
至 中的*this
預存值,並套用 所Order
指定的記憶體條件約束。
atomic::fetch_and
對值與儲存在中的*this
現有值執行位 「and」 (&
) 。
Ty atomic<Ty>::fetch_and (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_and (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
參數
Value
型別 Ty
的值。
Order
memory_order
。
傳回值
Ty
物件,包含位 「and」 (&
) 的結果。
備註
fetch_and
方法會執行讀取-修改-寫入作業,以的位 「and」 (&
) Value
取代 的預存值*this
,以及 儲存在 中的*this
目前值,在 所Order
指定的記憶體條件約束內。
atomic::fetch_or
對值與儲存在中的*this
現有值執行位 「or」 (|
) 。
Ty atomic<Ty>::fetch_or (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_or (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
參數
Value
型別 Ty
的值。
Order
memory_order
。
傳回值
Ty
物件,包含位 “or” (|
) 的結果。
備註
fetch_or
方法會執行讀取-修改-寫入作業,將的預存值*this
取代為 的位 「or」 (|
) Value
,以及儲存在 中*this
之 目前值內所指定的Order
記憶體條件約束內。
atomic::fetch_sub
將預存值減去指定的值。
Ty atomic<Ty>::fetch_sub (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_sub (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
參數
Value
型別 Ty
的值。
Order
memory_order
。
傳回值
Ty
物件,包含減法的結果。
備註
fetch_sub
方法會在 所Order
指定的記憶體條件約束內,執行讀寫作業,以不可部分完成地從 Value
中*this
儲存的值減去 。
atomic::fetch_xor
對值和儲存在 中的*this
現有值執行位「獨佔或」(^
)。
Ty atomic<Ty>::fetch_xor (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_xor (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
參數
Value
型別 Ty
的值。
Order
memory_order
。
傳回值
Ty
物件,包含位 「exclusive or」 (^
) 的結果。
備註
fetch_xor
方法會執行讀取-修改-寫入作業,將的預存值*this
取代為的位「獨佔或」(^
)Value
,以及儲存在 中的*this
目前值,並套用 所Order
指定的記憶體條件約束。
atomic::is_lock_free
指定上的*this
作業是否atomic
為無鎖定。
bool is_lock_free() const volatile noexcept;
傳回值
true
如果 atomic
上的 *this
作業是無鎖定的,則為 ,否則為 false
。
備註
atomic
如果沒有該類型上的作業使用鎖定,則類型是atomic
無鎖定的。
atomic::load
擷取 中 *this
指定記憶體條件約束內的預存值。
Ty atomic::load(
memory_order Order = memory_order_seq_cst
) const volatile noexcept;
Ty atomic::load(
memory_order Order = memory_order_seq_cst
) const noexcept;
參數
Order
memory_order
。 Order
不得為 memory_order_release
或 memory_order_acq_rel
。
傳回值
儲存於 *this
中的擷取值。
atomic::store
儲存指定的值。
void atomic<Ty>::store(
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
void atomic<Ty>::store(
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
參數
Value
Ty
物件。
Order
條件 memory_order
約束。
備註
這個成員函式會以不可部分完成的方式儲存 Value
在 *this
中指定的記憶體條件約束 Order
內。