共用方式為


<atomic> 函式

atomic_compare_exchange_strong
atomic_compare_exchange_strong_explicit
atomic_compare_exchange_weak
atomic_compare_exchange_weak_explicit
atomic_exchange
atomic_exchange_explicit
atomic_fetch_add
atomic_fetch_add_explicit
atomic_fetch_and
atomic_fetch_and_explicit
atomic_fetch_or
atomic_fetch_or_explicit
atomic_fetch_sub
atomic_fetch_sub_explicit
atomic_fetch_xor
atomic_fetch_xor_explicit
atomic_flag_clear
atomic_flag_clear_explicit
atomic_flag_test_and_set
atomic_flag_test_and_set_explicit
atomic_init
atomic_is_lock_free
atomic_load
atomic_load_explicit
atomic_signal_fence
atomic_store
atomic_store_explicit
atomic_thread_fence
kill_dependency

atomic_compare_exchange_strong

執行「不可部分完成比較和交換」作業。

template <class Ty>
inline bool atomic_compare_exchange_strong(
    volatile atomic<Ty>* Atom,
    Ty* Exp,
    Value) noexcept;

template <class Ty>
inline bool atomic_compare_exchange_strong(
    atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value) noexcept;

參數

Atom
儲存 Ty 類型值之 atomic 物件的指標。

Exp
指向 Ty 類型值的指標。

Value
型別 Ty 的值。

傳回值

true 如果值相等,則為 ,否則 false為 。

備註

這個方法會使用隱含 memory_order.memory_order_seq_cst 自變數來執行不可部分完成的比較和交換作業。 如需詳細資訊,請參閱atomic_compare_exchange_strong_explicit

atomic_compare_exchange_strong_explicit

atomic compare and exchange執行作業。

template <class T>
inline bool atomic_compare_exchange_strong_explicit(
    volatile atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value,
    memory_order Order1,
    memory_order Order2) noexcept;

template <class Ty>
inline bool atomic_compare_exchange_strong_explicit(
    atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value,
    memory_order Order1,
    memory_order Order2) noexcept;

參數

Atom
儲存 Ty 類型值之 atomic 物件的指標。

Exp
指向 Ty 類型值的指標。

Value
型別 Ty 的值。

Order1
第一個 memory_order 自變數。

Order2
第二個 memory_order 引數。 Order2 的值不能是 memory_order_releasememory_order_acq_rel,也不能高於 Order1 的值。

傳回值

true 如果值相等,則為 ,否則 false為 。

備註

atomic compare and exchange operation 比較 儲存在物件中的值,該值與 所指向 Atom 的值相 Exp比較。 如果值相等,則儲存在 所指向 Atom 之 物件中的值會取代 Value 為 ,方法是使用讀寫作業,並套用 所 Order1指定的記憶體順序條件約束。 如果值不相等,作業會將 所指向的值取代為 所指向ExpAtom之 物件中的值,並套用 所Order2指定的記憶體順序條件約束。

atomic_compare_exchange_weak

執行「弱式不可部分完成比較和交換」作業。

template <class Ty>
inline bool atomic_compare_exchange_strong(
    volatile atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value) noexcept;

template <class Ty>
inline bool atomic_compare_exchange_strong(
    atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value) noexcept;

參數

Atom
儲存 Ty 類型值之 atomic 物件的指標。

Exp
指向 Ty 類型值的指標。

Value
型別 Ty 的值。

傳回值

true 如果值相等,則為 ,否則 false為 。

備註

這個方法會執行具有隱含memory_order.memory_order_seq_cst自變數的弱式不可部分完成比較和交換作業。 如需詳細資訊,請參閱atomic_compare_exchange_weak_explicit

atomic_compare_exchange_weak_explicit

執行「弱式不可部分完成比較和交換」作業。

template <class Ty>
inline bool atomic_compare_exchange_weak_explicit(
    volatile atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value,
    memory_order Order1,
    memory_order Order2) noexcept;

template <class Ty>
inline bool atomic_compare_exchange_weak_explicit(
    atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value,
    memory_order Order1,
    memory_order Order2) noexcept;

參數

Atom
儲存 Ty 類型值之 atomic 物件的指標。

Exp
指向 Ty 類型值的指標。

Value
型別 Ty 的值。

Order1
第一個 memory_order 自變數。

Order2
第二個 memory_order 引數。 Order2 的值不能是 memory_order_releasememory_order_acq_rel,也不能高於 Order1 的值。

傳回值

true 如果值相等,則為 ,否則 false為 。

備註

如果預期和目前值不相等,則保證它們不會儲存新值的強式和弱式 atomic compare and exchange operation 。 強型別保證如果預期值和目前值相等,則會儲存新值。 弱式類別有時可能會傳回 false ,而且即使目前和預期的值相等,也不會儲存新的值。 換句話說,函式會傳回 false,但稍後對預期值的檢查可能會顯示它沒有變更,因此應該已比較為相等。

atomic_exchange

使用 Value 來取代 Atom 的預存值。

template <class T>
inline Ty atomic_exchange(volatile atomic<Ty>* _Atom, Ty Value) noexcept;

template <class Ty>
inline T atomic_exchange(atomic<Ty>* Atom, Ty Value) noexcept;

參數

Atom
儲存 Ty 類型值之 atomic 物件的指標。

Value
型別 Ty 的值。

傳回值

交換之前 Atom 的儲存值。

備註

atomic_exchange式會執行讀寫作業,以使用 memory_order.memory_order_seq_cst交換儲存在 中的AtomValue值。

atomic_exchange_explicit

Atom 的預存值取代為 Value

template <class Ty>
inline Ty atomic_exchange_explicit(
    volatile atomic<Ty>* Atom,
    Ty Value,
    memory_order Order) noexcept;

template <class Ty>
inline Ty atomic_exchange_explicit(
    atomic<Ty>* Atom,
    Ty Value,
    memory_order Order) noexcept;

參數

Atom
儲存 Ty 類型值之 atomic 物件的指標。

Value
型別 Ty 的值。

Order
memory_order

傳回值

交換之前 Atom 的儲存值。

備註

atomic_exchange_explicit式會執行讀取-修改-寫入作業,以在 所Order指定的記憶體條件約束中交換儲存ValueAtom的值。

atomic_fetch_add

將值新增至儲存於 atomic 物件的現有值。

template <class T>
T* atomic_fetch_add(volatile atomic<T*>* Atom, ptrdiff_t Value) noexcept;
template <class T>
T* atomic_fetch_add(atomic<T*>* Atom, ptrdiff_t Value) noexcept;

參數

Atom
儲存 T 類型指標之 atomic 物件的指標。

Value
型別 ptrdiff_t 的值。

傳回值

執行作業之前,物件所包含 atomic 之指標的值。

備註

atomic_fetch_add式會執行讀寫作業,以使用 memory_order.memory_order_seq_cst 條件約束,以不可部分完成的方式新增Value至 中Atom儲存的值。

atomic 類型是 atomic_address 時,Value 會具有類型 ptrdiff_t,而且作業會將儲存的指標視為 char *

也會針對整數類型多載這項作業︰

integral atomic_fetch_add(volatile atomic-integral* Atom, integral Value) noexcept;

integral atomic_fetch_add(atomic-integral* Atom, integral Value) noexcept;

atomic_fetch_add_explicit

將值新增至儲存於 atomic 物件的現有值。

template <class T>
T* atomic_fetch_add_explicit(
    volatile atomic<T*>* Atom,
    ptrdiff_t Value,
    memory_order Order) noexcept;

template <class T>
T* atomic_fetch_add_explicit(
    atomic<T*>* Atom,
    ptrdiff_t Value,
    memory_order Order) noexcept;

參數

Atom
儲存 T 類型指標之 atomic 物件的指標。

Value
型別 ptrdiff_t 的值。

傳回值

執行作業之前,物件所包含 atomic 之指標的值。

備註

atomic_fetch_add_explicit式會執行讀寫作業,以在 所Order指定的條件約束內memory_order,以不可部分完成的方式新增Value至 中Atom儲存的值。

atomic 類型是 atomic_address 時,Value 會具有類型 ptrdiff_t,而且作業會將儲存的指標視為 char *

也會針對整數類型多載這項作業︰

integral atomic_fetch_add_explicit(
    volatile atomic-integral* Atom,
    integral Value,
    memory_order Order) noexcept;

integral atomic_fetch_add_explicit(
    atomic-integral* Atom,
    integral Value,
    memory_order Order) noexcept;

atomic_fetch_and

對某個值和儲存於 atomic 物件的現有值執行位元 &

template <class T>
inline T atomic_fetch_and(volatile atomic<T>* Atom, T Value) noexcept;
template <class T>
inline T atomic_fetch_and(volatile atomic<T>* Atom, T Value) noexcept;

參數

Atom
儲存 T 類型值之 atomic 物件的指標。

Value
型別 T 的值。

傳回值

在執行作業之前,物件所包含的 atomic 值。

備註

atomic_fetch_and式會執行讀取-修改-寫入作業,使用 memory_order.memory_order_seq_cst 條件約束,將的預存值Atom取代為 的位&Value和儲存在 中的Atom目前值。

atomic_fetch_and_explicit

對某個值和儲存於 atomic 物件的現有值執行位元 &

template <class T>
inline T atomic_fetch_and_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

template <class T>
inline T atomic_fetch_and_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

參數

Atom
儲存 T 類型值之 atomic 物件的指標。

Value
型別 T 的值。

Order
memory_order

傳回值

在執行作業之前,物件所包含的 atomic 值。

備註

atomic_fetch_and_explicit式會執行讀取-修改-寫入作業,將的預存值取代為 的位&Value和儲存在 中Atom目前的值Atom,並包含在 所Order指定的記憶體條件約束內。

atomic_fetch_or

對某個值和儲存於 atomic 物件的現有值執行位元 or

template <class T>
inline T atomic_fetch_or (volatile atomic<T>* Atom, T Value) noexcept;
template <class T>
inline T atomic_fetch_or (volatile atomic<T>* Atom, T Value) noexcept;

參數

Atom
儲存 T 類型值之 atomic 物件的指標。

Value
型別 T 的值。

傳回值

在執行作業之前,物件所包含的 atomic 值。

備註

atomic_fetch_or式會執行讀取-修改-寫入作業,使用 memory_order.memory_order_seq_cst來將的預存值Atom取代為 的位orValue和儲存在 中的Atom目前值。

atomic_fetch_or_explicit

對某個值和儲存於 atomic 物件的現有值執行位元 or

template <class T>
inline T atomic_fetch_or_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

template <class T>
inline T atomic_fetch_or_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

參數

Atom
儲存 T 類型值之 atomic 物件的指標。

Value
型別 T 的值。

Order
memory_order

傳回值

在執行作業之前,物件所包含的 atomic 值。

備註

atomic_fetch_or_explicit式會執行讀取-修改-寫入作業,將的預存值取代為 的位Valueor和儲存在 Atom中目前的值Atom,並包含在 所Order指定的條件約束內memory_order

atomic_fetch_sub

將儲存於 atomic 物件的現有值減去某個值。

template <class T>
T* atomic_fetch_sub(
    volatile atomic<T*>* Atom,
    ptrdiff_t Value) noexcept;

template <class T>
T* atomic_fetch_sub(
    atomic<T*>* Atom,
    ptrdiff_t Value) noexcept;

參數

Atom
儲存 T 類型指標之 atomic 物件的指標。

Value
型別 ptrdiff_t 的值。

傳回值

執行作業之前,物件所包含 atomic 之指標的值。

備註

atomic_fetch_sub式會執行讀取-修改-寫入作業,以使用 memory_order.memory_order_seq_cst 條件約束從 中的Atom預存值不可部分減Value去。

atomic 類型是 atomic_address 時,Value 會具有類型 ptrdiff_t,而且作業會將儲存的指標視為 char *

也會針對整數類型多載這項作業︰

integral atomic_fetch_sub(volatile atomic-integral* Atom, integral Value) noexcept;
integral atomic_fetch_sub(atomic-integral* Atom, integral Value) noexcept;

atomic_fetch_sub_explicit

將儲存於 atomic 物件的現有值減去某個值。

template <class T>
T* atomic_fetch_sub_explicit(
    volatile atomic<T*>* Atom,
    ptrdiff_t Value,
    memory_order Order) noexcept;

template <class T>
T* atomic_fetch_sub_explicit(
    atomic<T*>* Atom,
    ptrdiff_t Value, memory_order Order) noexcept;

參數

Atom
儲存 T 類型指標之 atomic 物件的指標。

Value
型別 ptrdiff_t 的值。

傳回值

執行作業之前,物件所包含 atomic 之指標的值。

備註

atomic_fetch_sub_explicit式會執行讀取-修改-寫入作業,以在 所Order指定的條件約束內memory_order,以不可部分完成地從 ValueAtom儲存的值減去 。

atomic 類型是 atomic_address 時,Value 會具有類型 ptrdiff_t,而且作業會將儲存的指標視為 char *

也會針對整數類型多載這項作業︰

integral atomic_fetch_sub_explicit(
    volatile atomic-integral* Atom,
    integral Value,
    memory_order Order) noexcept;

integral atomic_fetch_sub_explicit(
    atomic-integral* Atom,
    integral Value,
    memory_order Order) noexcept;

atomic_fetch_xor

對某個值和儲存於 atomic 物件的現有值執行位元 exclusive or

template <class T>
inline T atomic_fetch_xor(volatile atomic<T>* Atom, T Value) noexcept;

template <class T>
inline T atomic_fetch_xor(volatile atomic<T>* Atom, T Value) noexcept;

參數

Atom
儲存 T 類型值之 atomic 物件的指標。

Value
型別 T 的值。

傳回值

在執行作業之前,物件所包含的 atomic 值。

備註

atomic_fetch_xor式會執行讀取-修改-寫入作業,使用 memory_order.memory_order_seq_cst來將的預存值Atom取代為 的位exclusive orValue和儲存在 中的Atom目前值。

atomic_fetch_xor_explicit

對值和儲存在物件中的atomic現有值執行位exclusive or

template <class T>
inline T atomic_fetch_xor_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

template <class T>
inline T atomic_fetch_xor_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

參數

Atom
儲存 T 類型值之 atomic 物件的指標。

Value
型別 T 的值。

Order
memory_order

傳回值

在執行作業之前,物件所包含的 atomic 值。

備註

atomic_fetch_xor_explicit式會執行讀取-修改-寫入作業,將的預存值取代為 的位exclusive orValue和儲存在 中Atom目前的值Atom,這些值是在 所Order指定的條件約束內memory_order

atomic_flag_clear

將物件中的atomic_flag旗標設定為 false,在內memory_order.memory_order_seq_cstbool

inline void atomic_flag_clear(volatile atomic_flag* Flag) noexcept;
inline void atomic_flag_clear(atomic_flag* Flag) noexcept;

參數

Flag
atomic_flag 物件的指標。

atomic_flag_clear_explicit

bool 物件中的 atomic_flag 旗標設定為 false,在指定的 memory_order 條件約束內。

inline void atomic_flag_clear_explicit(volatile atomic_flag* Flag, memory_order Order) noexcept;
inline void atomic_flag_clear_explicit(atomic_flag* Flag, memory_order Order) noexcept;

參數

Flag
atomic_flag 物件的指標。

Order
memory_order

atomic_flag_test_and_set

bool 物件中的 atomic_flag 旗標設定為 true,在 memory_order.memory_order_seq_cst的條件約束內。

inline bool atomic_flag_test_and_set(volatile atomic_flag* Flag,) noexcept;
inline bool atomic_flag_test_and_set(atomic_flag* Flag,) noexcept;

參數

Flag
atomic_flag 物件的指標。

傳回值

Flag 的初始值。

atomic_flag_test_and_set_explicit

bool 物件中的 atomic_flag 旗標設定為 true,在指定的 memory_order 條件約束內。

inline bool atomic_flag_test_and_set_explicit(volatile atomic_flag* Flag, memory_order Order) noexcept;
inline bool atomic_flag_test_and_set_explicit(atomic_flag* Flag, memory_order Order) noexcept;

參數

Flag
atomic_flag 物件的指標。

Order
memory_order

傳回值

Flag 的初始值。

atomic_init

設定 atomic 物件中的預存值。

template <class Ty>
inline void atomic_init(volatile atomic<Ty>* Atom, Ty Value) noexcept;
template <class Ty>
inline void atomic_init(atomic<Ty>* Atom, Ty Value) noexcept;

參數

Atom
儲存 Ty 類型值之 atomic 物件的指標。

Value
型別 Ty 的值。

備註

atomic_init 不是不可部分完成的作業。 它不是安全線程。

atomic_is_lock_free

指定 atomic 物件上的不可部分完成作業是否為「無鎖定」

template <class T>
inline bool atomic_is_lock_free(const volatile atomic<T>* Atom) noexcept;
template <class T>
inline bool atomic_is_lock_free(const atomic<T>* Atom) noexcept;

參數

Atom
儲存 T 類型值之 atomic 物件的指標。

傳回值

如果 Atom 上的不可部分完成作業是無鎖定,則為 true否則為 false

備註

如果該類型上沒有不可部分完成作業使用鎖定,則不可部分完成類型是「無鎖定」。 如果此函式傳 true回 ,則類型在訊號處理程式中是安全的。

atomic_load

擷取 atomic 物件中的預存值。

template <class Ty>
inline Ty atomic_load(const volatile atomic<Ty>* Atom) noexcept;
template <class Ty>
inline Ty atomic_load(const atomic<Ty>* Atom) noexcept;

參數

Atom
包含 atomic 類型值之 Ty 物件的指標。

傳回值

儲存於 Atom 中的擷取值。

備註

atomic_load 隱含使用 memory_order.memory_order_seq_cst

atomic_load_explicit

擷取物件中 atomic 指定的 memory_order內預存值。

template <class Ty>
inline Ty atomic_load_explicit(const volatile atomic<Ty>* Atom, memory_order Order) noexcept;
template <class Ty>
inline Ty atomic_load_explicit(const atomic<Ty>* Atom, memory_order Order) noexcept;

參數

Atom
包含 atomic 類型值之 Ty 物件的指標。

Order
memory_order。 請不要使用 memory_order_releasememory_order_acq_rel

傳回值

儲存於 Atom 中的擷取值。

atomic_signal_fence

做為柵欄,這是一種記憶體同步處理基本類型,可強制執行負載/存放區作業之間的順序,也就是呼叫線程中具有相同線程中執行之訊號處理程式的其他柵欄之間。

inline void atomic_signal_fence(memory_order Order) noexcept;

參數

Order
決定範圍類型的記憶體順序條件約束。

備註

Order 引數可決定範圍類型。

Description
memory_order_relaxed 範圍沒有作用。
memory_order_consume 範圍是取得範圍。
memory_order_acquire 範圍是取得範圍。
memory_order_release 範圍是釋放範圍。
memory_order_acq_rel 範圍同時是取得範圍和釋放範圍。
memory_order_seq_cst 範圍同時是取得範圍和釋放範圍,因此會一致。

atomic_store

以不可部分完成的方式將值儲存在物件中 atomic

template <class Ty>
inline Ty atomic_store_explicit(const volatile atomic<Ty>* Atom, Ty Value) noexcept;
template <class Ty>
inline Ty atomic_store_explicit(const atomic<Ty>* Atom, T Value) noexcept;

參數

Atom
包含 atomic 類型值之 Ty 物件的指標。

Value
型別 Ty 的值。

備註

atomic_storeValue 儲存在條件約束內所 Atom指向的物件中 memory_order.memory_order_seq_cst

atomic_store_explicit

以不可部分完成的方式將值儲存在物件中 atomic

template <class Ty>
inline Ty atomic_store_explicit(
    const volatile atomic<Ty>* Atom,
    Ty Value,
    memory_order Order) noexcept;

template <class Ty>
inline Ty atomic_store_explicit(
    const atomic<Ty>* Atom,
    T Value,
    memory_order Order) noexcept;

參數

Atom
包含 atomic 類型值之 Ty 物件的指標。

Value
型別 Ty 的值。

Order
memory_order。 請不要使用 memory_order_consumememory_order_acquirememory_order_acq_rel

備註

Order 所指定的 memory_order 內,atomic_store 會將 Value 儲存在 Atom 所指向的物件中。

atomic_thread_fence

做為 柵欄 —記憶體同步處理基本類型,可強制執行載入/存放區作業之間的順序,而不需要相關聯的不可部分完成作業。

inline void atomic_thread_fence(memory_order Order) noexcept;

參數

Order
決定範圍類型的記憶體順序條件約束。

備註

Order 引數可決定範圍類型。

Description
memory_order_relaxed 範圍沒有作用。
memory_order_consume 範圍是取得範圍。
memory_order_acquire 範圍是取得範圍。
memory_order_release 範圍是釋放範圍。
memory_order_acq_rel 範圍同時是取得範圍和釋放範圍。
memory_order_seq_cst 範圍同時是取得範圍和釋放範圍,因此會一致。

kill_dependency

移除相依性。

template <class Ty>
Ty kill_dependency(Ty Arg) noexcept;

參數

Arg
型別 Ty 的值。

傳回值

傳回值為 ArgArg 的評估不會執行與函式呼叫的相依性。 透過中斷可能的相依性鏈結,此函式可能會讓編譯器產生更具效率的程式碼。

另請參閱

<atomic>