共用方式為


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_weakcompare_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_cstmemory_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_cstmemory_order 使用 。

atomic::operator+=

將指定的值加入預存值。 僅供整數和指標特製化使用。

Ty atomic<Ty>::operator+=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
   Ty Value
) noexcept;

參數

Value
整數或指標值。

傳回值

Ty物件,包含加法的結果。

備註

這個運算子會使用 memory_order_seq_cstmemory_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_cstmemory_order 使用 。

atomic::operator-=

將預存值減去指定的值。 僅供整數和指標特製化使用。

Ty atomic<Ty>::operator-=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
   Ty Value
) noexcept;

參數

Value
整數或指標值。

傳回值

Ty物件,包含減法的結果。

備註

這個運算子會使用 memory_order_seq_cstmemory_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_ordermemory_order_seq_cstValue 內。

atomic::operator|=

在指定的值和 的預存值 *this 上執行位 「or」 ( | )。 僅供整數特製化使用。

atomic<Ty>::operator|= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
   Ty Value
) noexcept;

參數

Value
型別 Ty 的值。

傳回值

位 「or」 ( | ) 的結果。

備註

這個運算子會執行讀寫作業,以位 「or」 ( | ) 取代 的預存值 *this ,以及儲存在 *this 條件約束條件約束 memory_ordermemory_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_cstmemory_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

備註

這個不可部分完成的比較和交換作業會比較儲存在 與 中的 *thisExp 值。 如果值相等,作業會使用讀寫作業取代 儲存在 中的 *thisValue 值,並套用 所 Order1 指定的記憶體順序條件約束。 如果值不相等,作業會使用儲存在 中的 *this 值來取代 Exp 並套用 所 Order2 指定的記憶體順序條件約束。

沒有第二 memory_order 個的多載會使用以 值 Order1 為基礎的隱含 Order2 。 如果 Order1memory_order_acq_relOrder2 則為 memory_order_acquire 。 如果 Order1memory_order_releaseOrder2 則為 memory_order_relaxed 。 在其他所有情況下, Order2 都等於 Order1

對於採用兩個 memory_order 參數的多載,的值 Order2 不得為 memory_order_releasememory_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

備註

這個不可部分完成的比較和交換作業會比較儲存在 與 中的 *thisExp 值。 如果值相等,作業會使用讀寫作業取代 儲存在 中的 *thisValue 值,並套用 所 Order1 指定的記憶體順序條件約束。 如果值不相等,作業會使用儲存在 中的 *this 值來取代 Exp 並套用 所 Order2 指定的記憶體順序條件約束。

如果比較的值相等,則「弱式」不可部分完成比較和交換作業會執行交換。 如果值不相等,則作業不保證會執行交換。

沒有第二 memory_order 個的多載會使用以 值 Order1 為基礎的隱含 Order2 。 如果 Order1memory_order_acq_relOrder2 則為 memory_order_acquire 。 如果 Order1memory_order_releaseOrder2 則為 memory_order_relaxed 。 在其他所有情況下, Order2 都等於 Order1

對於採用兩個 memory_order 參數的多載,的值 Order2 不得為 memory_order_releasememory_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_orderOrder 不得為 memory_order_releasememory_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 內。

另請參閱

<atomic>
標頭檔參考