Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 Typouží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 *thissouboru .
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_orderoperá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_orderoperá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_orderoperá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 *thisrá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 *thisrá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 *thisrá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_acquirememory_order_acq_rel. Pokud Order1 je , Order2 je memory_order_relaxedmemory_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_acquirememory_order_acq_rel. Pokud Order1 je , Order2 je memory_order_relaxedmemory_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 *thisa 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 *thisa 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 *thisrá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 *thisrá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 *thissouboru .
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 *thisrámci omezení paměti, která jsou určena Order.