<atomic>
Definiuje klasy i klas szablonów używać do tworzenia typów, które obsługują operacji atomowych.
#include <atomic>
Uwagi
[!UWAGA]
W kodzie, który jest kompilowany przy użyciu /clr lub /clr:pure, Nagłówek ten jest zablokowany.
Operacja atomowa posiada dwie właściwości kluczy, które pomogą Ci prawidłowo zaznaczać obiektu bez korzystania z obiektu mutex blokad za pomocą wielu wątków.
Ponieważ operacja atomowa jest niepodzielna, druga operacja Atomowej dla tego samego obiektu z innego wątku można uzyskać stanu obiektu tylko przed lub po pierwszej operacji Atomowej.
Na podstawie jego memory_order argument, operacja atomowa ustala kolejność wymagania dotyczące widoczności skutki innych operacji atomowych w tym samym wątku.W związku z tym hamuje optymalizacje kompilatora, które naruszają wymagania zamawiania.
Na niektórych platformach, nie można skutecznie realizować operacje niepodzielny dla niektórych typów bez użycia mutex blokad.Typ niepodzielny jest zwolnić blokady użycie nie operacji atomowych na tego typu blokady.
Klasa atomic_flag zapewnia minimalny typ Atomowej, który przechowuje bool flagi.Jej operacje są zawsze wolne blokady.
Szablonu klasy atomic<Ty> przechowuje obiekt tego typu argumentu Ty i zapewnia Atomowej dostęp do tej wartości przechowywanej.Można utworzyć przy użyciu dowolnego typu, które mogą być kopiowane za pomocą memcpy i testowane na równości za pomocą memcmp.W szczególności służy on z typy zdefiniowane przez użytkownika, które spełniają te wymagania, a w wielu przypadkach, z typu zmiennoprzecinkowego.
Szablon ma także zestaw specjalizacje dla typów integralną i częściowa specjalizacja dla wskaźników.Specjalizacje te zapewniają dodatkowe operacje, które nie są dostępne za pośrednictwem szablonu podstawowego.
Wskaźnik specjalizacji
atomic<Ty *> Specjalizacje częściowe zastosowanie do wszystkich typów wskaźnika.Zapewniają one metody arytmetyki.
Integralną specjalizacji
atomic<integral> Specjalizacje stosuje się do wszystkich typów integralną.Zapewniają one dodatkowe operacje, które nie są dostępne za pośrednictwem szablonu podstawowego.
Każdy atomic<integral> typ ma odpowiednie makro, które można użyć w if directive do określenia w czasie kompilacji, czy operacje na tego typu są bez blokady.Jeśli wartość makro jest równa zero, nie są operacje na typ zwolnić blokady.Jeśli wartość wynosi 1, operacje mogą być zwolnić blokady i moduł wykonawczy wyboru jest wymagana.Jeśli wartość wynosi 2, operacje są bez blokady.Można użyć funkcji atomic_is_lock_free pod kątem w czasie wykonywania operacji na typ zwolnić blokady.
Dla każdego typu integralną istnieje odpowiedni typ niepodzielny nazwany zarządzanego obiektu tego typu integralną.Każdy atomic_integral typ ma ten sam zestaw funkcji elementów członkowskich jako odpowiedniego wystąpienia atomic<Ty> i mogą być przekazywane do dowolnej funkcji Atomowej Państw.
atomic_integralTyp |
Typem całkowitym |
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 |
Element TypeDef nazwy istnieje dla specjalizacji Atomowej szablonu dla niektórych typów, które są zdefiniowane w nagłówku <inttypes.h>.
Typ niepodzielny |
Nazwą elementu TypeDef |
---|---|
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> |
Strukturach
Nazwa |
Opis |
---|---|
Opis obiektu, który wykonuje operacje Atomowej na wartość przechowywana. |
|
Opisuje obiekt, który niepodzielnie ustawia lub usuwa flagi bool. |
Teksty stałe
Nazwa |
Opis |
---|---|
Dostarcza symbolicznych nazw dla operacji synchronizacji w lokalizacjach pamięci.Operacje te wpływają na jak przydziały w jednym wątku stają się widoczne w innym. |
Funkcje
Na liście poniżej, a funkcje, które nie kończą się na _explicit ma semantykę odpowiadającego _explicit, chyba że mają one niejawne memory_order argumenty memory_order_seq_cst.
Nazwa |
Opis |
---|---|
Wykonuje słabe porównanie atomowe i wymianę operacji na . |
|
Wykonuje słabe porównanie atomowe i wymianę operacji na . |
|
Wykonuje słabe porównanie atomowe i wymianę operacji. |
|
Wykonuje słabe porównanie atomowe i wymianę operacji. |
|
Zastępuje wartość przechowywana. |
|
Zastępuje wartość przechowywana. |
|
Dodaje określoną wartość do istniejącej wartości przechowywanej. |
|
Dodaje określoną wartość do istniejącej wartości przechowywanej. |
|
Wykonuje logiczną and na określoną wartość i istniejącej wartości przechowywanej. |
|
Wykonuje logiczną and na określoną wartość i istniejącej wartości przechowywanej. |
|
Wykonuje logiczną or na określoną wartość i istniejącej wartości przechowywanej. |
|
Wykonuje logiczną or na określoną wartość i istniejącej wartości przechowywanej. |
|
Odejmuje określoną wartość od istniejącej wartości przechowywanej. |
|
Odejmuje określoną wartość od istniejącej wartości przechowywanej. |
|
Wykonuje logiczną exclusive or na określoną wartość i istniejącej wartości przechowywanej. |
|
Wykonuje logiczną exclusive or na określoną wartość i istniejącej wartości przechowywanej. |
|
Ustawia flagę atomic_flag sprzeciw w stosunku do false. |
|
Ustawia flagę atomic_flag sprzeciw w stosunku do false. |
|
Ustawia flagę atomic_flag sprzeciw w stosunku do true. |
|
Ustawia flagę atomic_flag sprzeciw w stosunku do true. |
|
Ustawia wartość przechowywana w atomic obiektu. |
|
Określa, czy są działania atomowe na określony obiekt bez blokady. |
|
Niepodzielnego pobiera wartość. |
|
Niepodzielnego pobiera wartość. |
|
Działa jako ogrodzenia który ustanawia pamięci zamawiania wymagania między ogrodzenia w powołanie wątku, który ma obsługi sygnałów wykonywane w tym samym wątku. |
|
Niepodzielnego przechowuje wartość. |
|
Niepodzielnego przechowuje wartość. |
|
Działa jako ogrodzenia który ustanawia pamięci zamawiania wymogów w odniesieniu do innych ogrodzenia. |
|
Przerywa łańcuch zależności możliwe. |
Zobacz też
Informacje
Standardowa biblioteka szablonów