<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 |
---|---|
Popisuje objekt, který spouští atomické operace uložené hodnoty. |
|
Popisuje objekt, který atomicky nastaví nebo vymaže příznak bool. |
Výčty
Name |
Popis |
---|---|
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 |
---|---|
Provádí operaci atomické porovnání a záměna. |
|
Provádí operaci atomické porovnání a záměna. |
|
Provádí operaci slabé atomické porovnání a záměna. |
|
Provádí operaci slabé atomické porovnání a záměna. |
|
Nahradí uložené hodnoty. |
|
Nahradí uložené hodnoty. |
|
Přidá existující uložené hodnoty zadané hodnotě. |
|
Přidá existující uložené hodnoty zadané hodnotě. |
|
Provádí logické bitové and na zadanou hodnotu a existující uložené hodnoty. |
|
Provádí logické bitové and na zadanou hodnotu a existující uložené hodnoty. |
|
Provádí logické bitové or na zadanou hodnotu a existující uložené hodnoty. |
|
Provádí logické bitové or na zadanou hodnotu a existující uložené hodnoty. |
|
Odečte zadané hodnoty z existující uložené hodnoty. |
|
Odečte zadané hodnoty z existující uložené hodnoty. |
|
Provádí logické bitové exclusive or na zadanou hodnotu a existující uložené hodnoty. |
|
Provádí logické bitové exclusive or na zadanou hodnotu a existující uložené hodnoty. |
|
Nastaví příznak atomic_flag objekt na false. |
|
Nastaví příznak atomic_flag objekt na false. |
|
Nastaví příznak atomic_flag objekt na true. |
|
Nastaví příznak atomic_flag objekt na true. |
|
Nastaví hodnotu uloženou v atomic objektu. |
|
Určuje, zda jsou atomické operace na zadaný objekt uvolnění zámku. |
|
Atomicky vyhledá hodnotu. |
|
Atomicky vyhledá hodnotu. |
|
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. |
|
Atomicky ukládá hodnotu. |
|
Atomicky ukládá hodnotu. |
|
Funguje jako plotu , zavádí paměti řazení požadavky týkající se dalších oplocení. |
|
Rozdělí řetězec možných závislostí. |