atomic
Struktura
Popisuje objekt, který provádí atomic
operace s uloženou hodnotou typu Ty
.
Syntaxe
template <class Ty>
struct atomic;
Členové
Člen | Popis |
---|---|
Konstruktor | |
atomic |
Vytvoří atomický objekt. |
Operátory | |
atomic::operator Ty |
Přečte a vrátí uloženou hodnotu. (atomic::load ) |
atomic::operator= |
Použije zadanou hodnotu k nahrazení uložené hodnoty. (atomic::store ) |
atomic::operator++ |
Zvýší uloženou hodnotu. Používá se pouze integrální specializacemi a specializacemi ukazatele. |
atomic::operator+= |
Přidá zadanou hodnotu k uložené hodnotě. Používá se pouze integrální specializacemi a specializacemi ukazatele. |
atomic::operator-- |
Dekrementuje uloženou hodnotu. Používá se pouze integrální specializacemi a specializacemi ukazatele. |
atomic::operator-= |
Odečte zadanou hodnotu od uložené hodnoty. Používá se pouze integrální specializacemi a specializacemi ukazatele. |
atomic::operator&= |
Provede bitové "and" (& ) pro zadanou hodnotu a uloženou hodnotu. Používá se pouze integrálními specializacemi. |
atomic::operator|= |
Provede bitové "or" (| ) pro zadanou hodnotu a uloženou hodnotu. Používá se pouze integrálními specializacemi. |
atomic::operator^= |
Provede bitové "výhradní nebo" (^ ) pro zadanou hodnotu a uloženou hodnotu. Používá se pouze integrálními specializacemi. |
Functions | |
compare_exchange_strong |
atomic_compare_and_exchange Provede operaci this a vrátí výsledek. |
compare_exchange_weak |
weak_atomic_compare_and_exchange Provede operaci this a vrátí výsledek. |
fetch_add |
Přidá zadanou hodnotu k uložené hodnotě. |
fetch_and |
Provede bitové "and" (& ) pro zadanou hodnotu a uloženou hodnotu. |
fetch_or |
Provede bitové "or" (| ) pro zadanou hodnotu a uloženou hodnotu. |
fetch_sub |
Odečte zadanou hodnotu od uložené hodnoty. |
fetch_xor |
Provede bitové "výhradní nebo" (^ ) pro zadanou hodnotu a uloženou hodnotu. |
is_lock_free |
Určuje, jestli atomic jsou operace this zamčené bez zámku. Typ atomic je volný , pokud žádné atomic operace s tímto typem nepoužívají zámky. |
load |
Přečte a vrátí uloženou hodnotu. |
store |
Použije zadanou hodnotu k nahrazení uložené hodnoty. |
Poznámky
Typ Ty
musí být triviálně kopírovatelný. To znamená, že použití memcpy
ke zkopírování jeho bajtů musí vytvořit platný Ty
objekt, který se porovná s původním objektem. Členské compare_exchange_weak
funkce slouží memcmp
k určení, zda jsou dvě Ty
hodnoty compare_exchange_strong
stejné. Tyto funkce nebudou Ty
používat -defined operator==
. Členské funkce atomic
používané memcpy
ke kopírování hodnot typu Ty
.
Částečná specializace, atomic<Ty*>
existuje pro všechny typy ukazatelů. Specializace umožňuje sčítání posunu k hodnotě spravovaného ukazatele nebo odčítání posunu od ní. Aritmetické operace přebírají argument typu ptrdiff_t
a upraví tento argument podle velikosti Ty
, aby byl konzistentní s aritmetickou běžnou adresou.
Specializace existuje pro každý celočíselný typ s výjimkou bool
. Každá specializace poskytuje bohatou sadu metod pro atomické aritmetické a logické operace.
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>
Integrální specializace jsou odvozeny z odpovídajících atomic_integral
typů. Například atomic<unsigned int>
je odvozen z atomic_uint
.
Požadavky
Záhlaví: <atomic>
Obor názvů: std
atomic::atomic
Vytvoří atomický objekt.
atomic();
atomic( const atomic& );
atomic( Ty Value ) noexcept;
Parametry
Value
Inicializační hodnota.
Poznámky
Atomické objekty nelze kopírovat ani přesouvat.
Objekty, které jsou instancemi atomic<Ty>
lze inicializovat pouze konstruktor, který přebírá argument typu Ty
, a ne pomocí agregační inicializace. atomic_integral
Objekty je však možné inicializovat pouze pomocí agregované inicializace.
atomic<int> ai0 = ATOMIC_VAR_INIT(0);
atomic<int> ai1(0);
atomic::operator Ty
Operátor pro typ zadaný pro šablonu, atomic<Ty>
. Načte uloženou hodnotu v *this
souboru .
atomic<Ty>::operator Ty() const volatile noexcept;
atomic<Ty>::operator Ty() const noexcept;
Poznámky
Tento operátor použije memory_order_seq_cst
memory_order
operátor .
atomic::operator=
Uloží zadanou hodnotu.
Ty operator=(
Ty Value
) volatile noexcept;
Ty operator=(
Ty Value
) noexcept;
Parametry
Value
Objekt Ty
.
Návratová hodnota
Vrací objekt Value
.
atomic::operator++
Zvýší uloženou hodnotu. Používá se pouze integrální specializacemi a specializacemi ukazatele.
Ty atomic<Ty>::operator++(int) volatile noexcept;
Ty atomic<Ty>::operator++(int) noexcept;
Ty atomic<Ty>::operator++() volatile noexcept;
Ty atomic<Ty>::operator++() noexcept;
Návratová hodnota
První dva operátory vrátí inkrementovanou hodnotu; poslední dva operátory vrátí hodnotu před přírůstkem. Operátory používají operátory memory_order_seq_cst
memory_order
.
atomic::operator+=
Přidá zadanou hodnotu k uložené hodnotě. Používá se pouze integrální specializacemi a specializacemi ukazatele.
Ty atomic<Ty>::operator+=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
Ty Value
) noexcept;
Parametry
Value
Celočíselnou hodnotu nebo hodnotu ukazatele.
Návratová hodnota
Objekt Ty
, který obsahuje výsledek sčítání.
Poznámky
Tento operátor používá memory_order_seq_cst
memory_order
operátor .
atomic::operator--
Dekrementuje uloženou hodnotu. Používá se pouze integrální specializacemi a specializacemi ukazatele.
Ty atomic<Ty>::operator--(int) volatile noexcept;
Ty atomic<Ty>::operator--(int) noexcept;
Ty atomic<Ty>::operator--() volatile noexcept;
Ty atomic<Ty>::operator--() noexcept;
Návratová hodnota
První dva operátory vrátí dekrementovanou hodnotu; poslední dva operátory vrátí hodnotu před dekrementací. Operátory používají operátory memory_order_seq_cst
memory_order
.
atomic::operator-=
Odečte zadanou hodnotu od uložené hodnoty. Používá se pouze integrální specializacemi a specializacemi ukazatele.
Ty atomic<Ty>::operator-=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
Ty Value
) noexcept;
Parametry
Value
Celočíselnou hodnotu nebo hodnotu ukazatele.
Návratová hodnota
Objekt Ty
, který obsahuje výsledek odčítání.
Poznámky
Tento operátor používá memory_order_seq_cst
memory_order
operátor .
atomic::operator&=
Provede bitové "and" (&
) pro zadanou hodnotu a uloženou hodnotu *this
. Používá se pouze integrálními specializacemi.
atomic<Ty>::operator&= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator&= (
Ty Value
) noexcept;
Parametry
Value
Hodnota typu Ty
.
Návratová hodnota
Výsledek bitové "and" (&
).
Poznámky
Tento operátor provádí operaci čtení-úpravy zápisu nahradit uloženou hodnotu *this
bitové "and" (&
) Value
a aktuální hodnoty, která je uložena v *this
rámci omezení memory_order_seq_cst
memory_order
.
atomic::operator|=
Provede bitové "or" (|
) pro zadanou hodnotu a uloženou hodnotu *this
. Používá se pouze integrálními specializacemi.
atomic<Ty>::operator|= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
Ty Value
) noexcept;
Parametry
Value
Hodnota typu Ty
.
Návratová hodnota
Výsledek bitové "or" (|
).
Poznámky
Tento operátor provede operaci čtení-úpravy zápisu, která nahradí uloženou hodnotu *this
bitové "or"|
() Value
a aktuální hodnoty, která je uložena v *this
rámci omezení memory_order_seq_cst
memory_order
omezení.
atomic::operator^=
Provádí bitové "výhradní nebo" (^
) pro zadanou hodnotu a uloženou hodnotu *this
. Používá se pouze integrálními specializacemi.
atomic<Ty>::operator^= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator^= (
Ty Value
) noexcept;
Parametry
Value
Hodnota typu Ty
.
Návratová hodnota
Výsledek bitové "výhradní nebo" (^
).
Poznámky
Tento operátor provede operaci čtení-úpravy zápisu, která nahradí uloženou hodnotu *this
bitové "výhradní nebo" (^
) Value
a aktuální hodnoty, která je uložena v *this
rámci omezení memory_order_seq_cst
memory_order
omezení.
atomic::compare_exchange_strong
Provede atomický porovnávací a exchange operace s *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
Hodnota typu Ty
.
Value
Hodnota typu Ty
.
Order1
První memory_order
argument.
Order2
Druhý memory_order
argument.
Návratová hodnota
A bool
, který označuje výsledek porovnání hodnot.
Poznámky
Tato atomická operace porovnání a výměny porovnává hodnotu uloženou s *this
Exp
. Pokud jsou hodnoty stejné, operace nahradí hodnotu, která je uložena *this
Value
pomocí operace čtení-úpravy zápisu a použití omezení pořadí paměti určené Order1
. Pokud se hodnoty nerovnají, operace použije hodnotu uloženou k *this
nahrazení Exp
a použije omezení pořadí paměti, která jsou určena Order2
.
Přetížení, která nemají sekundu memory_order
, používají implicitní Order2
, která je založena na hodnotě Order1
. Pokud Order1
je , Order2
je memory_order_acquire
memory_order_acq_rel
. Pokud Order1
je , Order2
je memory_order_relaxed
memory_order_release
. Ve všech ostatních případech se Order2
rovná Order1
.
U přetížení, která přebírají dva memory_order
parametry, nesmí být memory_order_release
hodnota Order2
nebo memory_order_acq_rel
, a nesmí být silnější než hodnota Order1
.
atomic::compare_exchange_weak
Provádí slabé atomické porovnání a operace výměny s *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
Hodnota typu Ty
.
Value
Hodnota typu Ty
.
Order1
První memory_order
argument.
Order2
Druhý memory_order
argument.
Návratová hodnota
A bool
, který označuje výsledek porovnání hodnot.
Poznámky
Tato atomická operace porovnání a výměny porovnává hodnotu uloženou s *this
Exp
. Pokud jsou hodnoty stejné, operace nahradí hodnotu, která je uložena *this
Value
pomocí operace čtení-úpravy zápisu a použití omezení pořadí paměti určené Order1
. Pokud se hodnoty nerovnají, operace použije hodnotu uloženou k *this
nahrazení Exp
a použije omezení pořadí paměti, která jsou určena Order2
.
Slabá atomická operace porovnání a výměny provede výměnu, pokud jsou porovnávané hodnoty stejné. Pokud se hodnoty nerovnají, není zaručeno, že operace provede výměnu.
Přetížení, která nemají sekundu memory_order
, používají implicitní Order2
, která je založena na hodnotě Order1
. Pokud Order1
je , Order2
je memory_order_acquire
memory_order_acq_rel
. Pokud Order1
je , Order2
je memory_order_relaxed
memory_order_release
. Ve všech ostatních případech se Order2
rovná Order1
.
U přetížení, která přebírají dva memory_order
parametry, nesmí být memory_order_release
hodnota Order2
nebo memory_order_acq_rel
, a nesmí být silnější než hodnota Order1
.
atomic::exchange
Používá zadanou hodnotu k nahrazení uložené hodnoty *this
.
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
Hodnota typu Ty
.
Order
Úloha memory_order
.
Návratová hodnota
Uložená hodnota *this
před výměnou.
Poznámky
Tato operace provádí operaci čtení-úpravy zápisu, která slouží Value
k nahrazení hodnoty, která je uložena v *this
, v rámci omezení paměti, které jsou určeny Order
.
atomic::fetch_add
Načte hodnotu uloženou v *this
a potom přidá zadanou hodnotu k uložené hodnotě.
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
Hodnota typu Ty
.
Order
Úloha memory_order
.
Návratová hodnota
Objekt Ty
, který obsahuje hodnotu uloženou *this
před přidáním.
Poznámky
Metoda fetch_add
provádí operaci čtení-úpravy-zápis, která atomicky přidá Value
k uložené hodnotě v *this
a použije omezení paměti, která jsou určena Order
.
atomic::fetch_and
Provede bitové "and" (&
) u hodnoty a existující hodnoty, která je uložena v *this
.
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
Hodnota typu Ty
.
Order
Úloha memory_order
.
Návratová hodnota
Objekt Ty
, který obsahuje výsledek bitové "and" (&
).
Poznámky
Metoda fetch_and
provádí operaci čtení-úpravy-zápis nahradit uloženou hodnotu *this
bitové "and" (&
) Value
a aktuální hodnoty, která je uložena v *this
rámci omezení paměti určené Order
.
atomic::fetch_or
Provádí bitové "or" (|
) pro hodnotu a existující hodnotu, která je uložena v *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
Hodnota typu Ty
.
Order
Úloha memory_order
.
Návratová hodnota
Objekt Ty
, který obsahuje výsledek bitové "or" (|
).
Poznámky
Metoda fetch_or
provádí operaci čtení-úpravy-zápis nahradit uloženou hodnotu *this
bitové "or" (|
) Value
a aktuální hodnoty, která je uložena v *this
, v rámci omezení paměti určené Order
.
atomic::fetch_sub
Odečte zadanou hodnotu od uložené hodnoty.
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
Hodnota typu Ty
.
Order
Úloha memory_order
.
Návratová hodnota
Objekt Ty
, který obsahuje výsledek odčítání.
Poznámky
Metoda fetch_sub
provádí operaci čtení-úpravy zápisu, která atomicky odečítá Value
od uložené hodnoty v *this
, v rámci omezení paměti, které jsou určeny Order
.
atomic::fetch_xor
Provádí bitové "výhradní nebo" (^
) pro hodnotu a existující hodnotu, která je uložena v *this
.
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
Hodnota typu Ty
.
Order
Úloha memory_order
.
Návratová hodnota
Objekt Ty
, který obsahuje výsledek bitové "výhradní nebo" (^
).
Poznámky
Metoda fetch_xor
provádí operaci čtení-úpravy-zápis nahradit uloženou hodnotu *this
bitové "výhradní nebo" (^
) Value
a aktuální hodnoty, která je uložena v *this
, a použije omezení paměti, která jsou určena Order
.
atomic::is_lock_free
Určuje, jestli atomic
jsou operace *this
zamčené bez zámku.
bool is_lock_free() const volatile noexcept;
Návratová hodnota
true
pokud atomic
jsou operace *this
zamčené, v opačném případě false
.
Poznámky
Typ atomic
je volný, pokud žádné atomic
operace s tímto typem nepoužívají zámky.
atomic::load
Načte uloženou hodnotu v *this
rámci zadaných omezení paměti.
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
Úloha memory_order
. Order
nesmí být memory_order_release
nebo memory_order_acq_rel
.
Návratová hodnota
Načtená hodnota uložená v *this
souboru .
atomic::store
Uloží zadanou hodnotu.
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
Objekt Ty
.
Order
Omezení memory_order
.
Poznámky
Tato členová funkce atomicky ukládá Value
v *this
rámci omezení paměti, která jsou určena Order
.