Udostępnij za pośrednictwem


atomic Struktury

Opisuje obiekt, który wykonuje operacje atomic na przechowywanej wartości typu Ty.

Składnia

template <class Ty>
struct atomic;

Członkowie

Element członkowski opis
Konstruktor
atomic Tworzy obiekt niepodzielne.
Operatory
atomic::operator Ty Odczytuje i zwraca przechowywaną wartość. (atomic::load)
atomic::operator= Używa określonej wartości do zastąpienia przechowywanej wartości. (atomic::store)
atomic::operator++ Zwiększa przechowywaną wartość. Używane tylko przez specjalizacje całkowite i wskaźnikowe.
atomic::operator+= Dodaje określoną wartość do przechowywanej wartości. Używane tylko przez specjalizacje całkowite i wskaźnikowe.
atomic::operator-- Dekrementuje przechowywaną wartość. Używane tylko przez specjalizacje całkowite i wskaźnikowe.
atomic::operator-= Odejmuje określoną wartość z przechowywanej wartości. Używane tylko przez specjalizacje całkowite i wskaźnikowe.
atomic::operator&= Wykonuje bitowe wartości "i" (&) na określonej wartości i przechowywanej wartości. Używane tylko przez specjalizacje całkowite.
atomic::operator|= Wykonuje bitową wartość "lub" (|) na określonej wartości i przechowywaną wartość. Używane tylko przez specjalizacje całkowite.
atomic::operator^= Wykonuje bitową wartość "wyłączną lub" (^) na określonej wartości i przechowywaną wartość. Używane tylko przez specjalizacje całkowite.
Funkcje
compare_exchange_strong Wykonuje operację atomic_compare_and_exchange na this i zwraca wynik.
compare_exchange_weak Wykonuje operację weak_atomic_compare_and_exchange i this zwraca wynik.
fetch_add Dodaje określoną wartość do przechowywanej wartości.
fetch_and Wykonuje bitowe wartości "i" (&) na określonej wartości i przechowywanej wartości.
fetch_or Wykonuje bitową wartość "lub" (|) na określonej wartości i przechowywaną wartość.
fetch_sub Odejmuje określoną wartość z przechowywanej wartości.
fetch_xor Wykonuje bitową wartość "wyłączną lub" (^) na określonej wartości i przechowywaną wartość.
is_lock_free Określa, czy atomic operacje włączone thiswolne od blokady. Typ atomic jest wolny od blokady, jeśli żadne atomic operacje na tym typie nie używają blokad.
load Odczytuje i zwraca przechowywaną wartość.
store Używa określonej wartości do zastąpienia przechowywanej wartości.

Uwagi

Typ Ty musi być trywialnie kopiowalny. Oznacza to, że użycie polecenia memcpy do kopiowania bajtów musi spowodować wygenerowanie prawidłowego Ty obiektu, który porównuje się z oryginalnym obiektem. Funkcje składowe i compare_exchange_strong służą memcmp do określaniacompare_exchange_weak, czy dwie Ty wartości są równe. Te funkcje nie będą używać zdefiniowanej operator==wartości Ty. Funkcje składowe używane do kopiowania atomic wartości typu Ty.memcpy

Częściowa specjalizacja, atomic<Ty*>, istnieje dla wszystkich typów wskaźników. Specjalizacja umożliwia dodanie przesunięcia do wartości zarządzanego wskaźnika lub odejmowanie przesunięcia od niego. Operacje arytmetyczne przyjmują argument typu ptrdiff_t i dostosowują ten argument zgodnie z rozmiarem Ty , aby były spójne ze zwykłymi arytmetycznymi adresami.

Specjalizacja istnieje dla każdego typu całkowitego z wyjątkiem bool. Każda specjalizacja udostępnia bogaty zestaw metod dla operacji arytmetycznych i logicznych.

atomic<char>
atomic<signed char>
atomic<unsigned char>
atomic<char16_t>
atomic<char32_t>
atomic<wchar_t>
atomic<short>

atomic<unsigned short>
atomic<int>
atomic<unsigned int>
atomic<long>
atomic<unsigned long>
atomic<long long>
atomic<unsigned long long>

Specjalizacje całkowite pochodzą z odpowiednich atomic_integral typów. Na przykład atomic<unsigned int> pochodzi z elementu atomic_uint.

Wymagania

Nagłówka:<atomic>

Obszaru nazw:std

atomic::atomic

Tworzy obiekt niepodzielne.

atomic();
atomic( const atomic& );
atomic( Ty Value ) noexcept;

Parametry

Value
Wartość inicjowania.

Uwagi

Nie można kopiować ani przenosić obiektów niepodzielnych.

Obiekty, które są wystąpieniami atomic<Ty> programu , mogą być inicjowane tylko przez konstruktor, który przyjmuje argument typu Ty , a nie przy użyciu inicjowania agregacji. atomic_integral Jednak obiekty można zainicjować tylko przy użyciu inicjowania agregacji.

atomic<int> ai0 = ATOMIC_VAR_INIT(0);
atomic<int> ai1(0);

atomic::operator Ty

Operator typu określonego dla szablonu atomic<Ty>. Pobiera przechowywaną wartość w pliku *this.

atomic<Ty>::operator Ty() const volatile noexcept;
atomic<Ty>::operator Ty() const noexcept;

Uwagi

Ten operator stosuje memory_order_seq_cstmemory_orderelement .

atomic::operator=

Przechowuje określoną wartość.

Ty operator=(
   Ty Value
) volatile noexcept;
Ty operator=(
   Ty Value
) noexcept;

Parametry

Value
Obiekt Ty.

Wartość zwracana

Zwraca wartość Value.

atomic::operator++

Zwiększa przechowywaną wartość. Używane tylko przez specjalizacje całkowite i wskaźnikowe.

Ty atomic<Ty>::operator++(int) volatile noexcept;
Ty atomic<Ty>::operator++(int) noexcept;
Ty atomic<Ty>::operator++() volatile noexcept;
Ty atomic<Ty>::operator++() noexcept;

Wartość zwracana

Pierwsze dwa operatory zwracają wartość przyrostowaną; ostatnie dwa operatory zwracają wartość przed przyrostem. Operatory używają elementu memory_order_seq_cstmemory_order.

atomic::operator+=

Dodaje określoną wartość do przechowywanej wartości. Używane tylko przez specjalizacje całkowite i wskaźnikowe.

Ty atomic<Ty>::operator+=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
   Ty Value
) noexcept;

Parametry

Value
Wartość całkowita lub wskaźnikowa.

Wartość zwracana

Ty Obiekt, który zawiera wynik dodawania.

Uwagi

Ten operator używa elementu memory_order_seq_cstmemory_order.

atomic::operator--

Dekrementuje przechowywaną wartość. Używane tylko przez specjalizacje całkowite i wskaźnikowe.

Ty atomic<Ty>::operator--(int) volatile noexcept;
Ty atomic<Ty>::operator--(int) noexcept;
Ty atomic<Ty>::operator--() volatile noexcept;
Ty atomic<Ty>::operator--() noexcept;

Wartość zwracana

Dwa pierwsze operatory zwracają zdekrementowaną wartość; ostatnie dwa operatory zwracają wartość przed dekrementem. Operatory używają elementu memory_order_seq_cstmemory_order.

atomic::operator-=

Odejmuje określoną wartość z przechowywanej wartości. Używane tylko przez specjalizacje całkowite i wskaźnikowe.

Ty atomic<Ty>::operator-=(
   Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
   Ty Value
) noexcept;

Parametry

Value
Wartość całkowita lub wskaźnikowa.

Wartość zwracana

Ty Obiekt, który zawiera wynik odejmowania.

Uwagi

Ten operator używa elementu memory_order_seq_cstmemory_order.

atomic::operator&=

Wykonuje bitową wartość "i" (&) na określonej wartości i przechowywaną wartość *this. Używane tylko przez specjalizacje całkowite.

atomic<Ty>::operator&= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator&= (
   Ty Value
) noexcept;

Parametry

Value
Wartość typu Ty.

Wartość zwracana

Wynik bitowego ciągu "i" (&).

Uwagi

Ten operator wykonuje operację read-modify-write, aby zastąpić przechowywaną wartość *this parametru bitowym wartością "i" (&) Value i bieżącą wartością przechowywaną w elemencie , *thisw ramach ograniczeń memory_order_seq_cstmemory_order.

atomic::operator|=

Wykonuje bitową wartość "lub" (|) na określonej wartości i przechowywaną wartość *this. Używane tylko przez specjalizacje całkowite.

atomic<Ty>::operator|= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
   Ty Value
) noexcept;

Parametry

Value
Wartość typu Ty.

Wartość zwracana

Wynik bitowego ciągu "lub" (|).

Uwagi

Ten operator wykonuje operację read-modify-write, aby zastąpić przechowywaną wartość *this parametru bitową wartością "or" (|) Value i bieżącą wartością przechowywaną w elemencie , *thisw ramach ograniczeń memory_order_seq_cstmemory_order ograniczeń.

atomic::operator^=

Wykonuje bitową wartość "wyłączność lub" (^) na określonej wartości i przechowywaną wartość *this. Używane tylko przez specjalizacje całkowite.

atomic<Ty>::operator^= (
   Ty Value
) volatile noexcept;
atomic<Ty>::operator^= (
   Ty Value
) noexcept;

Parametry

Value
Wartość typu Ty.

Wartość zwracana

Wynik bitowego "wyłącznego lub" (^).

Uwagi

Ten operator wykonuje operację read-modify-write, aby zastąpić przechowywaną wartość *this parametru bitową wartością "wyłączną lub" (^) Value i bieżącą wartością przechowywaną w elemencie , *thisw ramach ograniczeń ograniczeń memory_order_seq_cstmemory_order .

atomic::compare_exchange_strong

Wykonuje niepodzielne operacje porównywania i wymiany na .*this

bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) volatile noexcept;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) noexcept;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_strong(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) noexcept;

Parametry

Exp
Wartość typu Ty.

Value
Wartość typu Ty.

Order1
Pierwszy memory_order argument.

Order2
Drugi memory_order argument.

Wartość zwracana

Element bool wskazujący wynik porównania wartości.

Uwagi

Ta niepodzielna operacja porównywania i wymiany porównuje wartość przechowywaną w *this elem Exp. Jeśli wartości są równe, operacja zastępuje wartość przechowywaną w *this elemencie Value za pomocą operacji read-modify-write i stosując ograniczenia kolejności pamięci określone przez Order1. Jeśli wartości nie są równe, operacja używa wartości przechowywanej w *this pliku w celu zastąpienia Exp i stosuje ograniczenia kolejności pamięci określone przez Order2.

Przeciążenia, które nie mają drugiego memory_order użycia niejawnego Order2 , który jest oparty na wartości Order1. Jeśli Order1 parametr ma memory_order_acq_relwartość , Order2 to memory_order_acquire. Jeśli Order1 parametr ma memory_order_releasewartość , Order2 to memory_order_relaxed. We wszystkich innych przypadkach Order2 wartość jest równa Order1.

W przypadku przeciążeń, które przyjmują dwa memory_order parametry, wartość Order2 nie może być memory_order_release równa lub memory_order_acq_rel, i nie może być silniejsza niż wartość Order1.

atomic::compare_exchange_weak

Wykonuje słabą operację porównywania niepodzielnego i wymiany na .*this

bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) volatile noexcept;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) noexcept;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) volatile noexcept;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) noexcept;

Parametry

Exp
Wartość typu Ty.

Value
Wartość typu Ty.

Order1
Pierwszy memory_order argument.

Order2
Drugi memory_order argument.

Wartość zwracana

Element bool wskazujący wynik porównania wartości.

Uwagi

Ta niepodzielna operacja porównywania i wymiany porównuje wartość przechowywaną w *this elem Exp. Jeśli wartości są równe, operacja zastępuje wartość przechowywaną w *this elemencie Value za pomocą operacji read-modify-write i stosując ograniczenia kolejności pamięci określone przez Order1. Jeśli wartości nie są równe, operacja używa wartości przechowywanej w *this pliku w celu zastąpienia Exp i stosuje ograniczenia kolejności pamięci określone przez Order2.

Słaba niepodzielna operacja porównywania i wymiany wykonuje wymianę, jeśli porównywane wartości są równe. Jeśli wartości nie są równe, operacja nie gwarantuje wykonania wymiany.

Przeciążenia, które nie mają drugiego memory_order użycia niejawnego Order2 , który jest oparty na wartości Order1. Jeśli Order1 parametr ma memory_order_acq_relwartość , Order2 to memory_order_acquire. Jeśli Order1 parametr ma memory_order_releasewartość , Order2 to memory_order_relaxed. We wszystkich innych przypadkach Order2 wartość jest równa Order1.

W przypadku przeciążeń, które przyjmują dwa memory_order parametry, wartość Order2 nie może być memory_order_release równa lub memory_order_acq_rel, i nie może być silniejsza niż wartość Order1.

atomic::exchange

Używa określonej wartości do zastąpienia przechowywanej *thiswartości .

Ty atomic<Ty>::exchange(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::exchange(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parametry

Value
Wartość typu Ty.

Order
Klasa memory_order.

Wartość zwracana

Przechowywana *this wartość przed wymianą.

Uwagi

Ta operacja wykonuje operację read-modify-write do użycia Value w celu zastąpienia wartości przechowywanej w *thisobiekcie w ramach ograniczeń pamięci określonych przez Orderprogram .

atomic::fetch_add

Pobiera wartość przechowywaną w *thispliku , a następnie dodaje określoną wartość do przechowywanej wartości.

Ty atomic<Ty>::fetch_add (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_add (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parametry

Value
Wartość typu Ty.

Order
Klasa memory_order.

Wartość zwracana

Ty Obiekt, który zawiera wartość przechowywaną *this przed dodatkami.

Uwagi

Metoda fetch_add wykonuje operację read-modify-write w celu niepodzielnego dodania Value do przechowywanej wartości w *thispliku i stosuje ograniczenia pamięci określone przez Order.

atomic::fetch_and

Wykonuje bitowe operacje "i" (&) na wartości i istniejącej wartości przechowywanej w *thispliku .

Ty atomic<Ty>::fetch_and (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_and (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parametry

Value
Wartość typu Ty.

Order
Klasa memory_order.

Wartość zwracana

Ty Obiekt, który zawiera wynik bitowego ciągu "i" (&).

Uwagi

Metoda fetch_and wykonuje operację read-modify-write, aby zastąpić przechowywaną wartość *this parametru bitowym wartością "i" (&) Value i bieżącą wartością przechowywaną w elemencie , *thisw ramach ograniczeń pamięci określonych przez Orderelement .

atomic::fetch_or

Wykonuje bitową wartość "lub" (|) na wartości i istniejącą wartość przechowywaną w pliku *this.

Ty atomic<Ty>::fetch_or (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_or (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parametry

Value
Wartość typu Ty.

Order
Klasa memory_order.

Wartość zwracana

Ty Obiekt, który zawiera wynik bitowego ciągu "or" (|).

Uwagi

Metoda fetch_or wykonuje operację read-modify-write, aby zastąpić przechowywaną wartość *this parametru bitowym wartością "or" (|) Value i bieżącą wartością przechowywaną w elemencie , *thisw ramach ograniczeń pamięci określonych przez Order.

atomic::fetch_sub

Odejmuje określoną wartość z przechowywanej wartości.

Ty atomic<Ty>::fetch_sub (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_sub (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parametry

Value
Wartość typu Ty.

Order
Klasa memory_order.

Wartość zwracana

Ty Obiekt, który zawiera wynik odejmowania.

Uwagi

Metoda fetch_sub wykonuje operację read-modify-write w celu niepodzielnego odejmowania Value z przechowywanej wartości w programie w *thisramach ograniczeń pamięci określonych przez Orderprogram .

atomic::fetch_xor

Wykonuje bitową wartość "wyłączną lub" (^) na wartości i istniejącą wartość przechowywaną w *thispliku .

Ty atomic<Ty>::fetch_xor (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_xor (
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parametry

Value
Wartość typu Ty.

Order
Klasa memory_order.

Wartość zwracana

Ty Obiekt, który zawiera wynik bitowego "wyłącznego lub" (^).

Uwagi

Metoda fetch_xor wykonuje operację read-modify-write, aby zastąpić przechowywaną wartość *this parametru bitową wartością "wyłączną lub" (^) Value i bieżącą wartością przechowywaną w *thiselemencie i stosuje ograniczenia pamięci określone przez Orderelement .

atomic::is_lock_free

Określa, czy atomic operacje włączone *this są wolne od blokady.

bool is_lock_free() const volatile noexcept;

Wartość zwracana

true jeśli atomic operacje włączone *this są wolne od blokady; w przeciwnym razie false.

Uwagi

Typ atomic jest wolny od blokady, jeśli żadne atomic operacje na tym typie nie używają blokad.

atomic::load

Pobiera przechowywaną wartość w programie w *thisramach określonych ograniczeń pamięci.

Ty atomic::load(
   memory_order Order = memory_order_seq_cst
) const volatile noexcept;
Ty atomic::load(
   memory_order Order = memory_order_seq_cst
) const noexcept;

Parametry

Order
Klasa memory_order. Order nie może mieć wartości memory_order_release lub memory_order_acq_rel.

Wartość zwracana

Pobrana wartość przechowywana w pliku *this.

atomic::store

Przechowuje określoną wartość.

void atomic<Ty>::store(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) volatile noexcept;
void atomic<Ty>::store(
   Ty Value,
   memory_order Order = memory_order_seq_cst
) noexcept;

Parametry

Value
Obiekt Ty.

Order
Ograniczenie memory_order .

Uwagi

Ta funkcja składowa jest niepodzielna przechowywana Value w *thisobiekcie w ramach ograniczeń pamięci określonych przez Orderelement .

Zobacz też

<atomic>
Odwołanie do plików nagłówka