Share via


<atomic>

定義類別和類別範本,以用來建立支援不可部分完成作業的類型。

語法

#include <atomic>

備註

注意

在使用 /clr:pure 編譯的程式碼中,會封鎖此標頭。 和 /clr:pure/clr:safe 在 Visual Studio 2017 和更新版本中都已被取代。

不可部分完成的作業有兩個主要屬性,可協助您使用多個執行緒來正確操作物件,而不需使用 mutex 鎖定。

  • 由於不可部分完成的作業是不可分割的,因此不同執行緒中相同物件上的第二個不可部分完成作業只能在第一次不可部分完成作業之前或之後取得物件的狀態。

  • 根據其 memory_order 引數,不可部分完成的作業會針對相同執行緒中其他不可部分完成作業之效果的可見度,建立排序需求。 因此,它會禁止違反排序需求的編譯器最佳化。

在部分平台上,如果不使用 mutex 鎖定,則可能無法有效率地實作某些類型的不可部分完成作業。 不可部分完成的類型是 lock-free ,如果該類型的不可部分完成作業使用鎖定。

C++11:在訊號處理常式中,如果 或 atomic_is_lock_free(x)true ,您可以在 物件 objobj.is_lock_free() 上執行不可部分完成的作業。

類別 atomic_flag 提供可保存 bool 旗標的最小不可部分完成類型。 它的作業永遠是無鎖定。

類別範本 atomic<T> 會儲存其引數類型的 T 物件,並提供該預存值的不可部分完成存取權。 您可以使用任何可使用 memcpy 和 測試是否相等 memcmp 的型別來具現化它。 特別的是,您可以將它與符合這些需求的使用者定義類型搭配使用,而且在許多情況下,也可以與浮點類型搭配使用。

範本也會有一組整數類型的特製化以及指標的部分特製化。 這些特製化提供無法透過主要範本使用的其他作業。

指標特製化

atomic<T *> 部分特製化會套用至所有指標類型。 它們提供方法來執行指標算術。

整數特製化

atomic<integral> 特製化會套用至所有整數類型。 它們提供無法透過主要範本使用的其他作業。

每個 atomic<integral> 類型都會有對應巨集,可在 if directive 中用來判斷該類型上的作業在編譯時期是否無鎖定。 如果宏的值為零,則類型上的作業不會鎖定。 如果值為 1,作業可能是無鎖定,而且需要執行階段檢查。 如果值為 2,作業是無鎖定。 您可以使用函式 atomic_is_lock_free,在執行階段決定類型上的作業是否無鎖定。

對於每個整數類型,有一個對應的具名不可部分完成類型,可管理該整數類型的物件。 每個 atomic_integral 類型都會有一組與對應 atomic<T> 具現化相同的成員函式,而且可以傳遞給任何非成員不可部分完成函式。

atomic_integral 型別 整數類型 atomic_is_lock_free 巨集
atomic_char char ATOMIC_CHAR_LOCK_FREE
atomic_schar signed char ATOMIC_CHAR_LOCK_FREE
atomic_uchar unsigned char ATOMIC_CHAR_LOCK_FREE
atomic_char16_t char16_t ATOMIC_CHAR16_T_LOCK_FREE
atomic_char32_t char32_t ATOMIC_CHAR32_T_LOCK_FREE
atomic_wchar_t wchar_t ATOMIC_WCHAR_T_LOCK_FREE
atomic_short short ATOMIC_SHORT_LOCK_FREE
atomic_ushort unsigned short ATOMIC_SHORT_LOCK_FREE
atomic_int int ATOMIC_INT_LOCK_FREE
atomic_uint unsigned int ATOMIC_INT_LOCK_FREE
atomic_long long ATOMIC_LONG_LOCK_FREE
atomic_ulong unsigned long ATOMIC_LONG_LOCK_FREE
atomic_llong long long ATOMIC_LLONG_LOCK_FREE
atomic_ullong unsigned long long ATOMIC_LLONG_LOCK_FREE

Typedef 名稱會針對標頭 <inttypes.h> 中定義的某些類型,針對不可部分完成範本的特製化而存在。

不可部分完成類型 Typedef 名字
atomic_int8_t atomic<int8_t>
atomic_uint8_t atomic<uint8_t>
atomic_int16_t atomic<int16_t>
atomic_uint16_t atomic<uint16_t>
atomic_int32_t atomic<int32_t>
atomic_uint32_t atomic<uint32_t>
atomic_int64_t atomic<int64_t>
atomic_uint64_t atomic<uint64_t>
atomic_int_least8_t atomic<int_least8_t>
atomic_uint_least8_t atomic<uint_least8_t>
atomic_int_least16_t atomic<int_least16_t>
atomic_uint_least16_t atomic<uint_least16_t>
atomic_int_least32_t atomic<int_least32_t>
atomic_uint_least32_t atomic<uint_least32_t>
atomic_int_least64_t atomic<int_least64_t>
atomic_uint_least64_t atomic<uint_least64_t>
atomic_int_fast8_t atomic<int_fast8_t>
atomic_uint_fast8_t atomic<uint_fast8_t>
atomic_int_fast16_t atomic<int_fast16_t>
atomic_uint_fast16_ atomic<uint_fast16_t>
atomic_int_fast32_t atomic<int_fast32_t>
atomic_uint_fast32_t atomic<uint_fast32_t>
atomic_int_fast64_t atomic<int_fast64_t>
atomic_uint_fast64_t atomic<uint_fast64_t>
atomic_intptr_t atomic<intptr_t>
atomic_uintptr_t atomic<uintptr_t>
atomic_size_t atomic<size_t>
atomic_ptrdiff_t atomic<ptrdiff_t>
atomic_intmax_t atomic<intmax_t>
atomic_uintmax_t atomic<uintmax_t>

結構

名稱 描述
atomic 結構 描述對預存值執行 atomic 作業的物件。
atomic_flag 結構 描述以不可部分完成方式設定和清除 bool 旗標的物件。

列舉

名稱 描述
memory_order 枚舉 為記憶體位置上的同步處理作業提供符號名稱。 這些作業會影響一個執行緒的指派如何在其他執行緒中變成可見。

函式

在下列清單中,結尾不是 _explicit 的函式具有對應 _explicit 之語意,不同之處在于其具有 的 memory_order_seq_cst 隱含 memory_order 引數。

名稱 描述
atomic_compare_exchange_strong atomic compare and exchange執行作業。
atomic_compare_exchange_strong_explicit atomic compare and exchange執行作業。
atomic_compare_exchange_weak 執行 weak atomic compare and exchange 作業。
atomic_compare_exchange_weak_explicit 執行 weak atomic compare and exchange 作業。
atomic_exchange 取代預存值。
atomic_exchange_explicit 取代預存值。
atomic_fetch_add 將指定的值加入現有預存值。
atomic_fetch_add_explicit 將指定的值加入現有預存值。
atomic_fetch_and 在指定的值和現有的預存值上執行位 「and」 ( & )。
atomic_fetch_and_explicit 在指定的值和現有的預存值上執行位 「and」 ( & )。
atomic_fetch_or 在指定的值和現有的預存值上執行位 「or」 ( | )。
atomic_fetch_or_explicit 在指定的值和現有的預存值上執行位 「or」 ( | )。
atomic_fetch_sub 將現有預存值減去指定的值。
atomic_fetch_sub_explicit 將現有預存值減去指定的值。
atomic_fetch_xor 在指定的值和現有的預存值上執行位「獨佔或」 ( ^ )。
atomic_fetch_xor_explicit 在指定的值和現有的預存值上執行位「獨佔或」 ( ^ )。
atomic_flag_clear atomic_flag 物件中的旗標設定為 false
atomic_flag_clear_explicit atomic_flag 物件中的旗標設定為 false
atomic_flag_test_and_set atomic_flag 物件中的旗標設定為 true
atomic_flag_test_and_set_explicit atomic_flag 物件中的旗標設定為 true
atomic_init 設定 atomic 物件中的預存值。
atomic_is_lock_free 指定所指定物件上的不可部分完成作業是否為「無鎖定」。
atomic_load 以不可部分完成的方式擷取值。
atomic_load_explicit 以不可部分完成的方式擷取值。
atomic_signal_fence 用來 fence 建立呼叫執行緒中具有相同執行緒中執行訊號處理常式之柵欄之間的記憶體排序需求。
atomic_store 以不可部分完成的方式儲存值。
atomic_store_explicit 以不可部分完成的方式儲存值。
atomic_thread_fence 做為 , fence 可建立與其他柵欄相關的記憶體排序需求。
kill_dependency 中斷可能的相依性鏈結。

另請參閱

標頭檔參考
C++ 標準程式庫參考