<atomic>
Atomik işlemleri destekleyen türler oluşturmak için kullanılacak sınıfları ve sınıf şablonlarını tanımlar.
Sözdizimi
#include <atomic>
Açıklamalar
Not
kullanılarak /clr:pure
derlenen kodda bu üst bilgi engellenir. Hem hem /clr:safe
de /clr:pure
Visual Studio 2017 ve sonraki sürümlerde kullanım dışıdır.
Atomik işlem, kilit kullanmadan mutex
bir nesneyi doğru şekilde işlemek için birden çok iş parçacığı kullanmanıza yardımcı olan iki anahtar özelliğe sahiptir.
Atomik işlem bölünmez olduğundan, aynı nesnedeki farklı bir iş parçacığından ikinci bir atomik işlem, nesnenin durumunu yalnızca ilk atomik işlemden önce veya sonra alabilir.
Bağımsız değişkenine
memory_order
bağlı olarak, atomik işlem aynı iş parçacığındaki diğer atomik işlemlerin etkilerinin görünürlüğü için sıralama gereksinimleri oluşturur. Sonuç olarak, sıralama gereksinimlerini ihlal eden derleyici iyileştirmelerini engeller.
Bazı platformlarda, kilit kullanmadan mutex
bazı türler için atomik işlemleri verimli bir şekilde uygulamak mümkün olmayabilir. Atomik tür, lock-free
bu türdeki atomik işlemler kilit kullanmıyorsa kullanılır.
C++11
: Sinyal işleyicilerinde, veya atomic_is_lock_free(x)
true
ise obj.is_lock_free()
bir nesne obj
üzerinde atomik işlemler gerçekleştirebilirsiniz.
sınıfı atomic_flag
, bayrağını tutan en küçük bir bool
atomik tür sağlar. İşlemleri her zaman kilitsizdir.
Sınıf şablonu atomic<T>
bağımsız değişken türünde T
bir nesneyi depolar ve bu depolanan değere atomik erişim sağlar. kullanarak kopyalayabileceğiniz ve kullanarak eşitlik için test edilebilen memcpy
herhangi bir türü kullanarak örneği oluşturabilirsiniz memcmp
. Özellikle, bu gereksinimleri karşılayan kullanıcı tanımlı türlerle ve çoğu durumda kayan nokta türleriyle kullanabilirsiniz.
Şablonda ayrıca integral türleri için bir dizi özelleştirme ve işaretçiler için kısmi özelleştirme vardır. Bu özelleştirmeler, birincil şablon aracılığıyla kullanılamaan ek işlemler sağlar.
İşaretçi Özelleştirmeleri
Kısmi atomic<T *>
özelleştirmeler tüm işaretçi türlerine uygulanır. İşaretçi aritmetiği için yöntemler sağlar.
İntegral Uzmanlıklar
Uzmanlıklar atomic<integral>
tüm tam sayı türleri için geçerlidir. Birincil şablon aracılığıyla kullanılamayabilecek ek işlemler sağlar.
Her atomic<integral>
tür, derleme zamanında bu türdeki işlemlerin kilitsiz olup olmadığını belirlemek için içinde kullanabileceğiniz karşılık gelen bir if directive
makroya sahiptir. Makronun değeri sıfırsa, türdeki işlemler kilitsiz değildir. Değer 1 ise, işlemler kilitsiz olabilir ve çalışma zamanı denetimi gerekir. Değer 2 ise, işlemler kilitsizdir. çalışma zamanında türündeki işlemlerin kilitsiz olup olmadığını belirlemek için işlevini atomic_is_lock_free
kullanabilirsiniz.
İntegral türlerinin her biri için, bu integral türündeki bir nesneyi yöneten karşılık gelen adlandırılmış bir atomik tür vardır. Her atomic_integral
tür, ilgili örneğiyle atomic<T>
aynı üye işlev kümesine sahiptir ve üye olmayan atomik işlevlerden herhangi birine geçirilebilir.
atomic_integral Tür |
İntegral Türü | atomic_is_lock_free Makro |
---|---|---|
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
üst bilgisinde <inttypes.h>
tanımlanan türlerden bazıları için atomik şablonun özelleştirmeleri için adlar vardır.
Atomik Tür | Typedef Ad |
---|---|
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> |
Yapılar
Veri Akışı Adı | Açıklama |
---|---|
atomic Yapı |
Depolanan bir değer üzerinde işlem gerçekleştiren atomic bir nesneyi açıklar. |
atomic_flag Yapı |
Bir bayrağı atomik olarak ayarlayan ve temizleyen bir bool nesneyi açıklar. |
Numaralandırmalar
Veri Akışı Adı | Açıklama |
---|---|
memory_order Sabit Listesi |
Bellek konumlarında eşitleme işlemleri için sembolik adlar sağlar. Bu işlemler, bir iş parçacığındaki atamaların başka bir iş parçacığında nasıl görünür hale geldiğini etkiler. |
İşlevler
Aşağıdaki listede, ile bitmeyecek _explicit
işlevler, örtük memory_order
bağımsız değişkenlerine sahip olmaları dışında karşılık gelen _explicit
öğesinin semantiğine memory_order_seq_cst
sahiptir.
Veri Akışı Adı | Açıklama |
---|---|
atomic_compare_exchange_strong |
atomic compare and exchange bir işlem gerçekleştirir. |
atomic_compare_exchange_strong_explicit |
atomic compare and exchange bir işlem gerçekleştirir. |
atomic_compare_exchange_weak |
bir weak atomic compare and exchange işlem gerçekleştirir. |
atomic_compare_exchange_weak_explicit |
bir weak atomic compare and exchange işlem gerçekleştirir. |
atomic_exchange |
Depolanan değerin yerini alır. |
atomic_exchange_explicit |
Depolanan değerin yerini alır. |
atomic_fetch_add |
Mevcut bir depolanmış değere belirtilen değeri ekler. |
atomic_fetch_add_explicit |
Mevcut bir depolanmış değere belirtilen değeri ekler. |
atomic_fetch_and |
Belirtilen değerde ve mevcut bir depolanmış değerde bit düzeyinde "ve" (& ) gerçekleştirir. |
atomic_fetch_and_explicit |
Belirtilen değerde ve mevcut bir depolanmış değerde bit düzeyinde "ve" (& ) gerçekleştirir. |
atomic_fetch_or |
Belirtilen değerde ve mevcut bir depolanmış değerde bit düzeyinde "veya" (| ) gerçekleştirir. |
atomic_fetch_or_explicit |
Belirtilen değerde ve mevcut bir depolanmış değerde bit düzeyinde "veya" (| ) gerçekleştirir. |
atomic_fetch_sub |
Belirtilen değeri mevcut bir depolanmış değerden çıkarır. |
atomic_fetch_sub_explicit |
Belirtilen değeri mevcut bir depolanmış değerden çıkarır. |
atomic_fetch_xor |
Belirtilen bir değerde ve mevcut bir depolanmış değerde bit düzeyinde "özel veya" (^ ) gerçekleştirir. |
atomic_fetch_xor_explicit |
Belirtilen bir değerde ve mevcut bir depolanmış değerde bit düzeyinde "özel veya" (^ ) gerçekleştirir. |
atomic_flag_clear |
Bir atomic_flag nesnedeki bayrağını olarak false ayarlar. |
atomic_flag_clear_explicit |
Bir atomic_flag nesnedeki bayrağını olarak false ayarlar. |
atomic_flag_test_and_set |
Bir atomic_flag nesnedeki bayrağını olarak true ayarlar. |
atomic_flag_test_and_set_explicit |
Bir atomic_flag nesnedeki bayrağını olarak true ayarlar. |
atomic_init |
Bir atomic nesnede depolanan değeri ayarlar. |
atomic_is_lock_free |
Belirtilen nesnedeki atomik işlemlerin kilitsiz olup olmadığını belirtir. |
atomic_load |
Atomik olarak bir değer alır. |
atomic_load_explicit |
Atomik olarak bir değer alır. |
atomic_signal_fence |
fence Aynı iş parçacığında yürütülen sinyal işleyicileri olan bir çağrı iş parçacığındaki çitler arasında bellek sıralama gereksinimlerini oluşturan bir işlevi görür. |
atomic_store |
Atomik olarak bir değer depolar. |
atomic_store_explicit |
Atomik olarak bir değer depolar. |
atomic_thread_fence |
Diğer çitlere göre bellek sıralama gereksinimlerini oluşturan bir fence işlev görür. |
kill_dependency |
Olası bir bağımlılık zincirini kırar. |
Ayrıca bkz.
Üst Bilgi Dosyaları Başvurusu
C++ Standart Kitaplığı Başvurusu