Udostępnij za pośrednictwem


<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

Struktura Atomowej

W tym artykule opisano obiekt, który wykonuje operacje niepodzielny wartości przechowywanej.

Struktura atomic_flag

Zawiera opis obiektu, który atomowo Ustawia lub usuwa bool flagi.

Teksty stałe

Nazwa

Opis

memory_order Enum

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

Funkcja atomic_compare_exchange_strong

Wykonuje atomic porównania i wymiany operacji.

Funkcja atomic_compare_exchange_strong_explicit

Wykonuje atomic porównania i wymiany operacji.

Funkcja atomic_compare_exchange_weak

Wykonuje słabe Porównaj niepodzielny i wymiany operacji.

Funkcja atomic_compare_exchange_weak_explicit

Wykonuje słabe Porównaj niepodzielny i wymiany operacji.

atomic_exchange, funkcja

Zastępuje wartość przechowywana.

Funkcja atomic_exchange_explicit

Zastępuje wartość przechowywana.

atomic_fetch_add, funkcja

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

Funkcja atomic_fetch_add_explicit

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

atomic_fetch_and, funkcja

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

Funkcja atomic_fetch_and_explicit

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

atomic_fetch_or, funkcja

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

Funkcja atomic_fetch_or_explicit

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

atomic_fetch_sub, funkcja

Odejmuje określona wartość z istniejącej wartości przechowywanej.

Funkcja atomic_fetch_sub_explicit

Odejmuje określona wartość z istniejącej wartości przechowywanej.

atomic_fetch_xor, funkcja

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

Funkcja atomic_fetch_xor_explicit

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

Funkcja atomic_flag_clear

Ustawia flagę atomic_flag obiekt do false.

Funkcja atomic_flag_clear_explicit

Ustawia flagę atomic_flag obiekt do false.

Funkcja atomic_flag_test_and_set

Ustawia flagę atomic_flag obiekt do true.

Funkcja atomic_flag_test_and_set_explicit

Ustawia flagę atomic_flag obiekt do true.

Funkcja atomic_init

Ustawia wartość przechowywana atomic obiektu.

atomic_is_lock_free, funkcja

Określa, czy są atomowej operacji na określony obiekt bez blokady.

Funkcja atomic_load

Atomowo pobiera wartość.

Funkcja atomic_load_explicit

Atomowo pobiera wartość.

Funkcja atomic_signal_fence

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.

Funkcja atomic_store

Atomowo przechowuje wartość.

Funkcja atomic_store_explicit

Atomowo przechowuje wartość.

Funkcja atomic_thread_fence

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

Funkcja kill_dependency

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

Zobacz też

Informacje

Standardowa biblioteka szablonu

Inne zasoby

Pliki nagłówków