Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:purederlenen 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_orderbağ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) trueise 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_cstsahiptir.
| 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 falseayarlar. |
atomic_flag_clear_explicit |
Bir atomic_flag nesnedeki bayrağını olarak falseayarlar. |
atomic_flag_test_and_set |
Bir atomic_flag nesnedeki bayrağını olarak trueayarlar. |
atomic_flag_test_and_set_explicit |
Bir atomic_flag nesnedeki bayrağını olarak trueayarlar. |
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