<atomic>

Definuje třídy a třídy šablonu používat k vytváření typů, které podporují atomická operace.

#include <atomic>

Poznámky

[!POZNÁMKA]

V kódu, který je zkompilován s použitím /clr nebo /clr:pure, toto záhlaví je blokován.

Atomická operace má dvě klíčové vlastnosti, které vám pomohou správně pracovat bez použití zámků mutex objekt pomocí více podprocesů.

  • Atomická operace je nedělitelná, druhý atomická operace na z jiného vlákna se stejným objektem můžete získat stav objektu pouze před nebo za první atomická operace.

  • Na základě jeho memory_order argument, atomická operace stanoví požadavky na viditelnost účinky jiné atomická operace řazení ve stejném podprocesu.V důsledku toho znemožňuje optimalizace kompilátoru, které porušují požadavky na řazení.

Na některých platformách, nemusí být možné efektivně implementovat atomická operace u některých typů bez použití mutex zámky.Atomová typ uvolnění zámku žádné atomické operace na daný typ použití zámků.

Třída atomic_flag poskytuje minimální atomovou typ, který má bool příznak.Její provoz je vždy uvolnění zámku.

Třída šablony atomic<Ty> uloží objekt jeho argument typu Ty a poskytuje atomické přístup k uložené hodnotě.Můžete vytvořit instanci jej pomocí libovolného typu, kterou lze zkopírovat pomocí memcpy a testování rovnosti pomocí memcmp.Zejména můžete s uživatelem definované typy, které splňují tyto požadavky a v mnoha případech s typy s plovoucí desetinnou čárkou.

Šablona také obsahuje sadu pro integrální typy odborností a částečné specializace pro ukazatele.Tyto specializace poskytují další operace, které nejsou k dispozici prostřednictvím primární šablona.

Ukazatel specializace

atomic<Ty *> Částečné specializace platí pro všechny typy ukazatelů.Poskytují metody pro aritmetiky ukazatele.

Integrální specializace

atomic<integral> Specializace platí pro všechny integrální typy.Poskytují další operace, které nejsou k dispozici prostřednictvím primární šablona.

Každý atomic<integral> typ má odpovídající makro, které můžete použít v if directive Chcete-li zjistit, zda jsou na tomto typu operace v době kompilace uvolnění zámku.Pokud makro hodnotu nula, operace na typu nejsou uvolnění zámku.Pokud je hodnota 1, operace může být uvolnění zámku a modul runtime je požadována kontrola.Pokud je hodnota 2, jsou operace uvolnění zámku.Můžete použít funkci atomic_is_lock_free za běhu určit, zda jsou operace na typu uvolnění zámku.

Pro každý typ integrální je odpovídající typ pojmenované atomovou, který spravuje objekt tohoto typu nedílnou.Každý atomic_integral typ má stejnou sadu členské funkce jako odpovídající instance z atomic<Ty> a mohou být předány do některé z funkcí atomové třetí.

atomic_integralTyp

Integrální typ.

atomic_is_lock_freeMakro

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

Existují jmen TypeDef pro specializace atomovou šablony pro některé typy, které jsou definovány v záhlaví <inttypes.h>.

Atomová typu

Název definice typu

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>

Struktury

Name

Popis

atomic – struktura

Popisuje objekt, který spouští atomické operace uložené hodnoty.

atomic_flag – struktura

Popisuje objekt, který atomicky nastaví nebo vymaže příznak bool.

Výčty

Name

Popis

memory_order – výčet

Poskytuje symbolické názvy pro operace synchronizace v paměťových místech.Tyto operace ovlivní, jak budou přiřazení v jednom vlákně viditelná v jiném.

Funkce

V následujícím seznamu funkcí, které nekončí v _explicit mít odpovídající sémantika _explicit, s tím rozdílem, že mají implicitní memory_order argumenty memory_order_seq_cst.

Name

Popis

atomic_compare_exchange_strong – funkce

Provádí operaci atomické porovnání a záměna.

atomic_compare_exchange_strong_explicit – funkce

Provádí operaci atomické porovnání a záměna.

atomic_compare_exchange_weak – funkce

Provádí operaci slabé atomické porovnání a záměna.

atomic_compare_exchange_weak_explicit – funkce

Provádí operaci slabé atomické porovnání a záměna.

atomic_exchange – funkce

Nahradí uložené hodnoty.

atomic_exchange_explicit – funkce

Nahradí uložené hodnoty.

atomic_fetch_add – funkce

Přidá existující uložené hodnoty zadané hodnotě.

atomic_fetch_add_explicit – funkce

Přidá existující uložené hodnoty zadané hodnotě.

atomic_fetch_and – funkce

Provádí logické bitové and na zadanou hodnotu a existující uložené hodnoty.

atomic_fetch_and_explicit – funkce

Provádí logické bitové and na zadanou hodnotu a existující uložené hodnoty.

atomic_fetch_or – funkce

Provádí logické bitové or na zadanou hodnotu a existující uložené hodnoty.

atomic_fetch_or_explicit – funkce

Provádí logické bitové or na zadanou hodnotu a existující uložené hodnoty.

atomic_fetch_sub – funkce

Odečte zadané hodnoty z existující uložené hodnoty.

atomic_fetch_sub_explicit – funkce

Odečte zadané hodnoty z existující uložené hodnoty.

atomic_fetch_xor – funkce

Provádí logické bitové exclusive or na zadanou hodnotu a existující uložené hodnoty.

atomic_fetch_xor_explicit – funkce

Provádí logické bitové exclusive or na zadanou hodnotu a existující uložené hodnoty.

atomic_flag_clear – funkce

Nastaví příznak atomic_flag objekt na false.

atomic_flag_clear_explicit – funkce

Nastaví příznak atomic_flag objekt na false.

atomic_flag_test_and_set – funkce

Nastaví příznak atomic_flag objekt na true.

atomic_flag_test_and_set_explicit – funkce

Nastaví příznak atomic_flag objekt na true.

atomic_init – funkce

Nastaví hodnotu uloženou v atomic objektu.

atomic_is_lock_free – funkce

Určuje, zda jsou atomické operace na zadaný objekt uvolnění zámku.

atomic_load – funkce

Atomicky vyhledá hodnotu.

atomic_load_explicit – funkce

Atomicky vyhledá hodnotu.

atomic_signal_fence – funkce

Funguje jako plotu , stanoví paměti řazení požadavky mezi oplocení v volací podprocesu, který byl spuštěn ve stejném podprocesu rutiny signál.

atomic_store – funkce

Atomicky ukládá hodnotu.

atomic_store_explicit – funkce

Atomicky ukládá hodnotu.

atomic_thread_fence – funkce

Funguje jako plotu , zavádí paměti řazení požadavky týkající se dalších oplocení.

kill_dependency – funkce

Rozdělí řetězec možných závislostí.

Viz také

Referenční dokumentace

Standardní knihovna šablon

Další zdroje

Standardní knihovna C++ – hlavičkové soubory