Sdílet prostřednictvím


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 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.

Viz také

<atomic>
Referenční informace k souborům hlaviček