<atomic>函式</atomic>
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
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, Ty Value) noexcept;
template <class Ty>
inline bool atomic_compare_exchange_strong(
atomic<Ty>* Atom, Ty* Exp, Ty Value) noexcept;
參數
Atom
指標atomic
物件,其中儲存型別的值Ty
。
Exp
指向 Ty
類型值的指標。
Value
型別 Ty
的值。
傳回值
表示數值比較結果的 bool
。
備註
這個方法會執行不可部分完成的比較和交換作業,使用隱含memory_order_seq_cst
memory_order引數。 如需詳細資訊,請參閱atomic_compare_exchange_strong_explicit 函式。
atomic_compare_exchange_strong_explicit 函式
執行不可部分完成的比較和交換作業。
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
指標atomic
物件,其中儲存型別的值Ty
。
Exp
指向 Ty
類型值的指標。
Value
型別 Ty
的值。
Order1
第一個memory_order引數。
Order2
第二個memory_order
引數。 值Order2
不能是memory_order_release
或memory_order_acq_rel
,它不能比的值更強Order1
。
傳回值
表示數值比較結果的 bool
。
備註
不可部分完成的比較和交換作業比較所指向的物件中儲存的值Atom
所指向的值Exp
。 如果值相等,儲存所指向的物件中的值atom
會取代Val
使用read-modify-write
作業,並套用記憶體排序所指定的條件約束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
指標atomic
物件,其中儲存型別的值Ty
。
Exp
指向 Ty
類型值的指標。
Value
型別 Ty
的值。
傳回值
表示數值比較結果的 bool
。
備註
這個方法會執行弱式不可部分完成比較和交換作業具有隱含memory_order_seq_cst
memory_order引數。 如需詳細資訊,請參閱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
指標atomic
物件,其中儲存型別的值Ty
。
Exp
指向 Ty
類型值的指標。
Value
型別 Ty
的值。
Order1
第一個memory_order引數。
Order2
第二個memory_order
引數。 值Order2
不能是memory_order_release
或memory_order_acq_rel
,也不可以是威力的值Order1
。
傳回值
表示數值比較結果的 bool
。
備註
不可部分完成的比較和交換作業比較所指向的物件中儲存的值Atom
所指向的值與Exp
。 如果值相等,作業將會取代儲存所指向的物件中的值Atom
與Val
使用read-modify-write
作業,並套用所指定的記憶體順序條件約束Order1
。 如果值不相等,作業將會取代所指向的值Exp
儲存所指向的物件中的值與Atom
並套用所指定的記憶體順序條件約束Order2
。
A弱式不可部分完成的比較和交換作業會執行交換,如果相比較的值是否相等。 不過,如果值不相等,作業來執行交換不保證。
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
指標atomic
物件,其中儲存型別的值Ty
。
Value
型別 Ty
的值。
傳回值
交換之前 Atom
的儲存值。
備註
atomic_exchange
函數執行read-modify-write
交換所儲存的值的作業Atom
與Value
,並使用memory_order_seq_cst
memory_order。
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
指標atomic
物件,其中儲存型別的值Ty
。
Value
型別 Ty
的值。
Order
A memory_order。
傳回值
交換之前 Atom
的儲存值。
備註
atomic_exchange_explicit
函數執行read-modify-write
交換所儲存的值的作業Atom
與Value
,所指定的記憶體條件約束內Order
。
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
指標atomic
物件,其中儲存類型的指標T
。
Value
型別 ptrdiff_t
的值。
傳回值
執行作業之前,不可部分完成的物件所包含的指標值。
備註
atomic_fetch_add
函式會執行read-modify-write
作業,將自動新增Value
中的預存值Atom
,並使用memory_order_seq_cst
memory_order條件約束。
當不可部分完成類型是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
指標atomic
物件,其中儲存類型的指標T
。
Value
型別 ptrdiff_t
的值。
傳回值
執行作業之前,不可部分完成的物件所包含的指標值。
備註
atomic_fetch_add_explicit
函式會執行read-modify-write
作業,將自動新增Value
中的預存值Atom
內memory_order所指定的條件約束Order
。
當不可部分完成類型是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 函式
執行位元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
指標atomic
物件,其中儲存型別的值T
。
Value
型別 T
的值。
傳回值
執行作業之前,不可部分完成的物件所包含的值。
備註
atomic_fetch_and
函式會執行read-modify-write
作業的預存的值取代Atom
的位元and
的Value
和目前值儲存在Atom
,並使用memory_order_seq_cst
memory_order條件約束。
atomic_fetch_and_explicit 函式
執行位元and
值與現有的值會儲存在atomic
物件。
template <class T>
inline T atomic_fetch_and_explicit(
volatile atomic<T>* Atom, T Value,
memory_order Order);
noexcepttemplate <class T>
inline T atomic_fetch_and_explicit(
volatile atomic<T>* Atom, T Value,
memory_order Order);
noexcept
參數
Atom
指標atomic
物件,其中儲存型別的值T
。
Value
型別 T
的值。
Order
A memory_order。
傳回值
執行作業之前,不可部分完成的物件所包含的值。
備註
atomic_fetch_and_explicit
函式會執行read-modify-write
作業的預存的值取代Atom
的位元and
的Value
和目前值儲存在Atom
,所指定的記憶體條件約束內Order
。
atomic_fetch_or 函式
執行位元or
對某個值和現有的值會儲存在atomic
物件。
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
指標atomic
物件,其中儲存型別的值T
。
Value
型別 T
的值。
傳回值
執行作業之前,不可部分完成的物件所包含的值。
備註
atomic_fetch_or
函式會執行read-modify-write
作業的預存的值取代Atom
的位元or
的Value
和目前值儲存在Atom
,並使用memory_order_seq_cst
memory_order。
atomic_fetch_or_explicit 函式
執行位元or
對某個值和現有的值會儲存在atomic
物件。
template <class T>
inline T atomic_fetch_or_explicit(
volatile atomic<T>* Atom, T Value,
memory_order Order);
noexcepttemplate <class T>
inline T atomic_fetch_or_explicit(
volatile atomic<T>* Atom, T Value,
memory_order Order);
noexcept
參數
Atom
指標atomic
物件,其中儲存型別的值T
。
Value
型別 T
的值。
Order
A memory_order。
傳回值
執行作業之前,不可部分完成的物件所包含的值。
備註
atomic_fetch_or_explicit
函式會執行read-modify-write
作業的預存的值取代Atom
的位元or
的Value
和目前值儲存在Atom
內memory_order所指定的條件約束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
指標atomic
物件,其中儲存類型的指標T
。
Value
型別 ptrdiff_t
的值。
傳回值
執行作業之前,不可部分完成的物件所包含的指標值。
備註
atomic_fetch_sub
函式會執行read-modify-write
作業,以便自動減去Value
中儲存的值從Atom
,並使用memory_order_seq_cst
memory_order條件約束。
當不可部分完成類型是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
指標atomic
物件,其中儲存類型的指標T
。
Value
型別 ptrdiff_t
的值。
傳回值
執行作業之前,不可部分完成的物件所包含的指標值。
備註
atomic_fetch_sub_explicit
函式會執行read-modify-write
作業,以便自動減去Value
中儲存的值從Atom
內memory_order所指定的條件約束Order
。
當不可部分完成類型是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 函式
執行位元exclusive or
對某個值和現有的值會儲存在atomic
物件。
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
指標atomic
物件,其中儲存型別的值T
。
Value
型別 T
的值。
傳回值
執行作業之前,不可部分完成的物件所包含的值。
備註
atomic_fetch_xor
函式會執行read-modify-write
作業的預存的值取代Atom
的位元exclusive or
的Value
和目前值儲存在Atom
,並使用memory_order_seq_cst
memory_order。
atomic_fetch_xor_explicit 函式
執行位元exclusive or
對某個值和現有的值會儲存在atomic
物件。
template <class T>
inline T atomic_fetch_xor_explicit(
volatile atomic<T>* Atom, T Value,
memory_order Order);
noexcepttemplate <class T>
inline T atomic_fetch_xor_explicit(
volatile atomic<T>* Atom, T Value,
memory_order Order);
noexcept
參數
Atom
指標atomic
物件,其中儲存型別的值T
。
Value
型別 T
的值。
Order
A memory_order。
傳回值
執行作業之前,不可部分完成的物件所包含的值。
備註
atomic_fetch_xor_explicit
函式會執行read-modify-write
作業的預存的值取代Atom
的位元exclusive or
的Value
和目前值儲存在Atom
內memory_order所指定的條件約束Order
。
atomic_flag_clear 函式
設定bool
加上旗標atomic_flag物件傳遞給false
內memory_order_seq_cst
memory_order。
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
A memory_order。
atomic_flag_test_and_set 函式
設定bool
加上旗標atomic_flag物件傳遞給true
,條件約束內memory_order_seq_cst
memory_order。
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
A 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
指標atomic
物件,其中儲存型別的值Ty
。
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
指標atomic
物件,其中儲存型別的值T
。
傳回值
true
如果不可部分完成的作業上Atom
無鎖定,否則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_seq_cst
memory_order。
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
A memory_order。 請勿使用memory_order_release
或memory_order_acq_rel
。
傳回值
儲存於 Atom
中的擷取值。
atomic_signal_fence 函式
做為圍欄— 這是記憶體同步處理原始物件的順序載入/儲存作業之間強制執行 — 之間有相同的執行緒中執行的訊號處理常式呼叫的執行緒中其他圍籬。
inline void atomic_signal_fence(memory_order Order) noexcept;
參數
Order
順序會決定圍欄類型的條件約束的記憶體。
備註
Order
引數會決定範圍類型。
memory_order_relaxed |
範圍有任何作用。 |
memory_order_consume |
範圍是取得範圍。 |
memory_order_acquire |
範圍是取得範圍。 |
memory_order_release |
範圍是版本範圍。 |
memory_order_acq_rel |
取得範圍而發行圍欄圍牆。 |
memory_order_seq_cst |
圍牆取得圍欄和發行建圍牆,而循序一致。 |
atomic_store 函式
以不可部分完成方式將值儲存在不可部分完成的物件中。
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
不可部分完成的物件指標,該物件包含 Ty
類型的值。
Value
型別 Ty
的值。
備註
atomic_store
儲存Value
所指向的物件中Atom
內memory_order_seq_cst
memory_order條件約束。
atomic_store_explicit 函式
以不可部分完成方式將值儲存在不可部分完成的物件中。
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
A memory_order。 Do not use memory_order_consume
, memory_order_acquire
, or memory_order_acq_rel
.
備註
atomic_store
儲存Value
所指向的物件中Atom
內memory_order
所指定Order
。
atomic_thread_fence 函式
做為圍欄— 這是記憶體同步處理原始物件,會強制排序載入/儲存作業之間,沒有相關聯的不可部分完成作業。
inline void atomic_thread_fence(memory_order Order) noexcept;
參數
Order
順序會決定圍欄類型的條件約束的記憶體。
備註
Order
引數會決定範圍類型。
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
不執行函式呼叫的相依性。 中斷相依性鏈結,函式可能會讓編譯器產生更有效率的程式碼。