<atomic>
Definiuje klasy i szablonu klasy używać do tworzenia typów, które obsługują atomowej operacji.
#include <atomic>
Uwagi
[!UWAGA]
W kodzie, który jest kompilowany za pomocą /clr lub /clr:pure, ten nagłówek jest zablokowany.
Operacja atomowa ma dwie właściwości kluczy, które pomagają korzystać z wielu wątków poprawnie manipulować obiektu bez użycia blokady obiektu mutex.
Ponieważ operacja atomowa jest niepodzielna, druga operacja Atomowej 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, atomowej operacji ustala kolejność wymagania dotyczące widoczności skutków innych operacji atomowych w tym samym wątku.W konsekwencji hamuje optymalizacje kompilatora, które naruszają wymagania zamawiania.
Na niektórych platformach, nie można skutecznie realizować atomowej operacji w przypadku niektórych typów bez korzystania z mutex blokad.Typ niepodzielny jest zwolnić blokady użycie nie operacji atomowych na tego typu blokady.
Klasa atomic_flag zapewnia minimalny typ niepodzielny, która posiada bool flagi.Jej operacje są zawsze wolne blokady.
Klasy szablonowej 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 rzecz równości za pomocą memcmp.W szczególności można go z typów zdefiniowanych przez użytkownika, które spełniają te wymagania, a w wielu przypadkach z typów zmiennoprzecinkowych.
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 pomocą szablonu podstawowy.
Wskaźnik specjalizacji
atomic<Ty *> Specjalizacje częściowe zastosowanie do wszystkich typów wskaźnik.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 pomocą szablonu podstawowy.
Każdy atomic<integral> typu 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 makro wartość zero, nie są operacje na typ bez blokady.Jeśli wartość wynosi 1, operacji może być bez blokady i runtime wyboru jest wymagane.Jeśli wartość jest 2, są operacje bez blokady.Można użyć funkcji atomic_is_lock_free do określenia w czasie wykonywania, czy są operacje na typ bez blokady.
Dla każdego z typów integralną jest odpowiedni typ niepodzielny nazwany zarządzanego obiektu tego typu integralną.Każdy atomic_integral typu ma ten sam zestaw funkcji elementów członkowskich jako odpowiedniego wystąpienia atomic<Ty> i mogą być przekazywane do 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 istnieją nazwy dla specjalizacji Atomowej szablonu dla niektórych typów, które są zdefiniowane w nagłówku <inttypes.h>.
Typ niepodzielny |
Nazwa 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 |
---|---|
W tym artykule opisano obiekt, który wykonuje operacje niepodzielny wartości przechowywanej. |
|
Zawiera opis obiektu, który atomowo Ustawia lub usuwa bool flagi. |
Teksty stałe
Nazwa |
Opis |
---|---|
Nazwy symboliczne dostaw dla operacji synchronizacji w lokalizacji pamięci.Operacje te wpływają na jak przydziały w jeden wątek stają się widoczne w innym. |
Funkcje
Na liście następujące funkcje, które nie kończą się na _explicit ma semantykę odpowiadającej _explicit, chyba że mają one niejawne memory_order argumenty z memory_order_seq_cst.
Nazwa |
Opis |
---|---|
Wykonuje atomic porównania i wymiany operacji. |
|
Wykonuje atomic porównania i wymiany operacji. |
|
Wykonuje słabe Porównaj niepodzielny i wymiany operacji. |
|
Wykonuje słabe Porównaj niepodzielny i wymiany 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 o określoną wartość i istniejącej wartości przechowywanej. |
|
Wykonuje logiczną and o określoną wartość i istniejącej wartości przechowywanej. |
|
Wykonuje logiczną or o określoną wartość i istniejącej wartości przechowywanej. |
|
Wykonuje logiczną or o określoną wartość i istniejącej wartości przechowywanej. |
|
Odejmuje określona wartość z istniejącej wartości przechowywanej. |
|
Odejmuje określona wartość z istniejącej wartości przechowywanej. |
|
Wykonuje logiczną exclusive or o określoną wartość i istniejącej wartości przechowywanej. |
|
Wykonuje logiczną exclusive or o określoną wartość i istniejącej wartości przechowywanej. |
|
Ustawia flagę atomic_flag obiekt do false. |
|
Ustawia flagę atomic_flag obiekt do false. |
|
Ustawia flagę atomic_flag obiekt do true. |
|
Ustawia flagę atomic_flag obiekt do true. |
|
Ustawia wartość przechowywana atomic obiektu. |
|
Określa, czy są atomowej operacji na określony obiekt bez blokady. |
|
Atomowo pobiera wartość. |
|
Atomowo pobiera wartość. |
|
Działa jako ogrodzenia , 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. |
|
Atomowo przechowuje wartość. |
|
Atomowo przechowuje wartość. |
|
Działa jako ogrodzenia , ustanawia pamięci zamawiania wymogów w odniesieniu do innych ogrodzenia. |
|
Przerywa łańcuch zależności możliwe. |
Zobacz też
Informacje
Standardowa biblioteka szablonu