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 this są wolne 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_cst
memory_order
element .
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_cst
memory_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_cst
memory_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_cst
memory_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_cst
memory_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 , *this
w ramach ograniczeń memory_order_seq_cst
memory_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 , *this
w ramach ograniczeń memory_order_seq_cst
memory_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 , *this
w ramach ograniczeń ograniczeń memory_order_seq_cst
memory_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_rel
wartość , Order2
to memory_order_acquire
. Jeśli Order1
parametr ma memory_order_release
wartość , 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_rel
wartość , Order2
to memory_order_acquire
. Jeśli Order1
parametr ma memory_order_release
wartość , 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 *this
wartoś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 *this
obiekcie w ramach ograniczeń pamięci określonych przez Order
program .
atomic::fetch_add
Pobiera wartość przechowywaną w *this
pliku , 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 *this
pliku 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 *this
pliku .
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 , *this
w ramach ograniczeń pamięci określonych przez Order
element .
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 , *this
w 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 *this
ramach ograniczeń pamięci określonych przez Order
program .
atomic::fetch_xor
Wykonuje bitową wartość "wyłączną lub" (^
) na wartości i istniejącą wartość przechowywaną w *this
pliku .
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 *this
elemencie i stosuje ograniczenia pamięci określone przez Order
element .
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 *this
ramach 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 *this
obiekcie w ramach ograniczeń pamięci określonych przez Order
element .
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla