Udostępnij za pośrednictwem


<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

atomic — Struktura

Opis obiektu, który wykonuje operacje Atomowej na wartość przechowywana.

atomic_flag — Struktura

Opisuje obiekt, który niepodzielnie ustawia lub usuwa flagi bool.

Teksty stałe

Nazwa

Opis

memory_order Enum

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

atomic_compare_exchange_strong — Funkcja

Wykonuje słabe porównanie atomowe i wymianę operacji na .

atomic_compare_exchange_strong_explicit — Funkcja

Wykonuje słabe porównanie atomowe i wymianę operacji na .

atomic_compare_exchange_weak — Funkcja

Wykonuje słabe porównanie atomowe i wymianę operacji.

atomic_compare_exchange_weak_explicit — Funkcja

Wykonuje słabe porównanie atomowe i wymianę operacji.

atomic_exchange, funkcja

Zastępuje wartość przechowywana.

atomic_exchange_explicit — Funkcja

Zastępuje wartość przechowywana.

atomic_fetch_add, funkcja

Dodaje określoną wartość do istniejącej wartości przechowywanej.

atomic_fetch_add_explicit — Funkcja

Dodaje określoną wartość do istniejącej wartości przechowywanej.

atomic_fetch_and, funkcja

Wykonuje logiczną and na określoną wartość i istniejącej wartości przechowywanej.

atomic_fetch_and_explicit — Funkcja

Wykonuje logiczną and na określoną wartość i istniejącej wartości przechowywanej.

atomic_fetch_or, funkcja

Wykonuje logiczną or na określoną wartość i istniejącej wartości przechowywanej.

atomic_fetch_or_explicit — Funkcja

Wykonuje logiczną or na określoną wartość i istniejącej wartości przechowywanej.

atomic_fetch_sub, funkcja

Odejmuje określoną wartość od istniejącej wartości przechowywanej.

atomic_fetch_sub_explicit — Funkcja

Odejmuje określoną wartość od istniejącej wartości przechowywanej.

atomic_fetch_xor, funkcja

Wykonuje logiczną exclusive or na określoną wartość i istniejącej wartości przechowywanej.

atomic_fetch_xor_explicit — Funkcja

Wykonuje logiczną exclusive or na określoną wartość i istniejącej wartości przechowywanej.

atomic_flag_clear — Funkcja

Ustawia flagę atomic_flag sprzeciw w stosunku do false.

atomic_flag_clear_explicit — Funkcja

Ustawia flagę atomic_flag sprzeciw w stosunku do false.

atomic_flag_test_and_set — Funkcja

Ustawia flagę atomic_flag sprzeciw w stosunku do true.

atomic_flag_test_and_set_explicit — Funkcja

Ustawia flagę atomic_flag sprzeciw w stosunku do true.

atomic_init — Funkcja

Ustawia wartość przechowywana w atomic obiektu.

atomic_is_lock_free, funkcja

Określa, czy są działania atomowe na określony obiekt bez blokady.

atomic_load — Funkcja

Niepodzielnego pobiera wartość.

atomic_load_explicit — Funkcja

Niepodzielnego pobiera wartość.

atomic_signal_fence — Funkcja

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.

atomic_store — Funkcja

Niepodzielnego przechowuje wartość.

atomic_store_explicit — Funkcja

Niepodzielnego przechowuje wartość.

atomic_thread_fence — Funkcja

Działa jako ogrodzenia który ustanawia pamięci zamawiania wymogów w odniesieniu do innych ogrodzenia.

kill_dependency — Funkcja

Przerywa łańcuch zależności możliwe.

Zobacz też

Informacje

Standardowa biblioteka szablonów

Inne zasoby

Pliki nagłówkowe standardowej biblioteki języka C++