<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_release
或 memory_order_acq_rel
,也不能高於 Order1
的值。
傳回值
true
如果值相等,則為 ,否則 false
為 。
備註
會 atomic compare and exchange operation
比較 儲存在物件中的值,該值與 所指向 Atom
的值相 Exp
比較。 如果值相等,則儲存在 所指向 Atom
之 物件中的值會取代 Value
為 ,方法是使用讀寫作業,並套用 所 Order1
指定的記憶體順序條件約束。 如果值不相等,作業會將 所指向的值取代為 所指向Exp
Atom
之 物件中的值,並套用 所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_release
或 memory_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
交換儲存在 中的Atom
Value
值。
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
指定的記憶體條件約束中交換儲存Value
Atom
的值。
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
取代為 的位or
Value
和儲存在 中的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
式會執行讀取-修改-寫入作業,將的預存值取代為 的位Value
or
和儲存在 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
,以不可部分完成地從 Value
中Atom
儲存的值減去 。
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 or
Value
和儲存在 中的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 or
Value
和儲存在 中Atom
目前的值Atom
,這些值是在 所Order
指定的條件約束內memory_order
。
atomic_flag_clear
將物件中的atomic_flag
旗標設定為 false
,在內memory_order.memory_order_seq_cst
。bool
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_release
或 memory_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_store
會 Value
儲存在條件約束內所 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_consume
、memory_order_acquire
或 memory_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
的值。
傳回值
傳回值為 Arg
。 Arg
的評估不會執行與函式呼叫的相依性。 透過中斷可能的相依性鏈結,此函式可能會讓編譯器產生更具效率的程式碼。