Aracılığıyla paylaş


<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

Dekont

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_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)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

Ad Tanım
atomic Yapısı Depolanan bir değer üzerinde işlem gerçekleştiren atomic bir nesneyi açıklar.
atomic_flag Yapısı Bir bayrağı atomik olarak ayarlayan ve temizleyen bir bool nesneyi açıklar.

Numaralandırmalar

Ad Tanım
memory_order Enum 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.

Ad Tanım
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