Dela via


<atomic> funktioner

Rubriken <atomic> innehåller följande funktioner:

atomic_compare_exchange_strong

Utför en atomisk jämförelse- och utbytesåtgärd.

template <class Ty>
inline bool atomic_compare_exchange_strong(
    volatile atomic<Ty>* Atom,
    Ty* Exp,
    Value) noexcept;

template <class Ty>
inline bool atomic_compare_exchange_strong(
    atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen Ty.

Exp
En pekare till ett värde av typen Ty.

Value
Ett värde av typen Ty.

Returvärde

true om värdena är lika med, annars false.

Anmärkningar

Den här metoden utför en atomisk jämförelse- och utbytesåtgärd med implicita memory_order.memory_order_seq_cst argument. Mer information finns i atomic_compare_exchange_strong_explicit.

atomic_compare_exchange_strong_explicit

Utför en atomic compare and exchange åtgärd.

template <class T>
inline bool atomic_compare_exchange_strong_explicit(
    volatile atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value,
    memory_order Order1,
    memory_order Order2) noexcept;

template <class Ty>
inline bool atomic_compare_exchange_strong_explicit(
    atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value,
    memory_order Order1,
    memory_order Order2) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen Ty.

Exp
En pekare till ett värde av typen Ty.

Value
Ett värde av typen Ty.

Order1
Första memory_order argumentet.

Order2
Andra memory_order argumentet. Värdet Order2 för får inte vara memory_order_release eller memory_order_acq_rel, det kan inte vara starkare än värdet för Order1.

Returvärde

true om värdena är lika med, annars false.

Anmärkningar

En atomic compare and exchange operation jämför värdet som lagras i objektet som pekas på av Atom mot det värde som pekas på av Exp. Om värdena är lika ersätts värdet som lagras i objektet som pekas på av Atom med Value genom att använda en läs-ändra-skriv-åtgärd och tillämpa de minnesordningsbegränsningar som anges av Order1. Om värdena inte är lika med ersätter åtgärden det värde som pekas på Exp med värdet som lagras i objektet som pekas på av Atom och tillämpar minnesordningsbegränsningarna som anges av Order2.

atomic_compare_exchange_weak

Utför en svag atomisk jämförelse- och utbytesåtgärd .

template <class Ty>
inline bool atomic_compare_exchange_strong(
    volatile atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value) noexcept;

template <class Ty>
inline bool atomic_compare_exchange_strong(
    atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen Ty.

Exp
En pekare till ett värde av typen Ty.

Value
Ett värde av typen Ty.

Returvärde

true om värdena är lika med, annars false.

Anmärkningar

Den här metoden utför en svag atomisk jämförelse- och utbytesåtgärd som har implicita memory_order.memory_order_seq_cst argument. Mer information finns i atomic_compare_exchange_weak_explicit.

atomic_compare_exchange_weak_explicit

Utför en svag atomisk jämförelse- och utbytesåtgärd .

template <class Ty>
inline bool atomic_compare_exchange_weak_explicit(
    volatile atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value,
    memory_order Order1,
    memory_order Order2) noexcept;

template <class Ty>
inline bool atomic_compare_exchange_weak_explicit(
    atomic<Ty>* Atom,
    Ty* Exp,
    Ty Value,
    memory_order Order1,
    memory_order Order2) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen Ty.

Exp
En pekare till ett värde av typen Ty.

Value
Ett värde av typen Ty.

Order1
Första memory_order argumentet.

Order2
Andra memory_order argumentet. Värdet Order2 för får inte vara memory_order_release eller memory_order_acq_rel, och kan inte heller vara starkare än värdet för Order1.

Returvärde

true om värdena är lika med, annars false.

Anmärkningar

Både de starka och svaga smakerna av en atomic compare and exchange operation garanti för att de inte lagrar det nya värdet om de förväntade och aktuella värdena inte är lika. Den starka smaken garanterar att det nya värdet lagras om de förväntade och aktuella värdena är lika. Den svaga smaken kan ibland returnera false och inte lagra det nya värdet även om de aktuella och förväntade värdena är lika. Med andra ord returnerar falsefunktionen , men en senare undersökning av det förväntade värdet kan visa att den inte har ändrats och därför borde ha jämförts som lika.

atomic_exchange

Används Value för att ersätta det lagrade värdet för Atom.

template <class T>
inline Ty atomic_exchange(volatile atomic<Ty>* _Atom, Ty Value) noexcept;

template <class Ty>
inline T atomic_exchange(atomic<Ty>* Atom, Ty Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen Ty.

Value
Ett värde av typen Ty.

Returvärde

Det lagrade värdet Atom för före utbytet.

Anmärkningar

Funktionen atomic_exchange utför en läs-ändra-skriv-åtgärd för att utbyta värdet som lagras i Atom med , med Valuehjälp av memory_order.memory_order_seq_cst.

atomic_exchange_explicit

Ersätter det lagrade värdet Atom för med Value.

template <class Ty>
inline Ty atomic_exchange_explicit(
    volatile atomic<Ty>* Atom,
    Ty Value,
    memory_order Order) noexcept;

template <class Ty>
inline Ty atomic_exchange_explicit(
    atomic<Ty>* Atom,
    Ty Value,
    memory_order Order) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen Ty.

Value
Ett värde av typen Ty.

Order
En memory_order.

Returvärde

Det lagrade värdet Atom för före utbytet.

Anmärkningar

Funktionen atomic_exchange_explicit utför en läs-ändra-skriv-åtgärd för att utbyta värdet som lagras i Atom med Value, inom de minnesbegränsningar som anges av Order.

atomic_fetch_add

Lägger till ett värde i ett befintligt värde som lagras i ett atomic objekt.

template <class T>
T* atomic_fetch_add(volatile atomic<T*>* Atom, ptrdiff_t Value) noexcept;
template <class T>
T* atomic_fetch_add(atomic<T*>* Atom, ptrdiff_t Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar en pekare för att skriva T.

Value
Ett värde av typen ptrdiff_t.

Returvärde

Värdet för pekaren som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_add utför en läs-ändra-skriv-åtgärd för att atomiskt lägga Value till det lagrade värdet i Atom, med hjälp av villkoret memory_order.memory_order_seq_cst .

När atomtypen är atomic_address, har typen Value och åtgärden behandlar den lagrade pekaren som en ptrdiff_tchar * .

Den här åtgärden är också överbelastad för integraltyper:

integral atomic_fetch_add(volatile atomic-integral* Atom, integral Value) noexcept;

integral atomic_fetch_add(atomic-integral* Atom, integral Value) noexcept;

atomic_fetch_add_explicit

Lägger till ett värde i ett befintligt värde som lagras i ett atomic objekt.

template <class T>
T* atomic_fetch_add_explicit(
    volatile atomic<T*>* Atom,
    ptrdiff_t Value,
    memory_order Order) noexcept;

template <class T>
T* atomic_fetch_add_explicit(
    atomic<T*>* Atom,
    ptrdiff_t Value,
    memory_order Order) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar en pekare för att skriva T.

Value
Ett värde av typen ptrdiff_t.

Returvärde

Värdet för pekaren som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_add_explicit utför en läs-ändra-skriv-åtgärd för att atomiskt lägga Value till det lagrade värdet i Atom, inom de memory_order begränsningar som anges av Order.

När atomtypen är atomic_address, har typen Value och åtgärden behandlar den lagrade pekaren som en ptrdiff_tchar * .

Den här åtgärden är också överbelastad för integraltyper:

integral atomic_fetch_add_explicit(
    volatile atomic-integral* Atom,
    integral Value,
    memory_order Order) noexcept;

integral atomic_fetch_add_explicit(
    atomic-integral* Atom,
    integral Value,
    memory_order Order) noexcept;

atomic_fetch_and

Utför lite på ett värde och ett befintligt & värde som lagras i ett atomic objekt.

template <class T>
inline T atomic_fetch_and(volatile atomic<T>* Atom, T Value) noexcept;
template <class T>
inline T atomic_fetch_and(volatile atomic<T>* Atom, T Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen T.

Value
Ett värde av typen T.

Returvärde

Värdet som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_and utför en läs-ändra-skriv-åtgärd för att ersätta det lagrade värdet för med en bitvis Atom av & och det aktuella värdet som lagras i Value, med hjälp av Atom villkoretmemory_order.memory_order_seq_cst.

atomic_fetch_and_explicit

Utför ett bitvis av ett värde och ett befintligt & värde som lagras i ett atomic objekt.

template <class T>
inline T atomic_fetch_and_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

template <class T>
inline T atomic_fetch_and_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen T.

Value
Ett värde av typen T.

Order
En memory_order.

Returvärde

Värdet som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_and_explicit utför en läs-ändra-skriv-åtgärd för att ersätta det lagrade värdet Atom för med en bitvis & av Value och det aktuella värdet som lagras i Atom, inom de minnesbegränsningar som anges av Order.

atomic_fetch_or

Utför lite på ett värde och ett befintligt or värde som lagras i ett atomic objekt.

template <class T>
inline T atomic_fetch_or (volatile atomic<T>* Atom, T Value) noexcept;
template <class T>
inline T atomic_fetch_or (volatile atomic<T>* Atom, T Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen T.

Value
Ett värde av typen T.

Returvärde

Värdet som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_or utför en läs-ändra-skriv-åtgärd för att ersätta det lagrade värdet för med en bitvis Atom av or och det aktuella värdet som lagras i Value, med hjälp av Atommemory_order.memory_order_seq_cst.

atomic_fetch_or_explicit

Utför lite på ett värde och ett befintligt or värde som lagras i ett atomic objekt.

template <class T>
inline T atomic_fetch_or_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

template <class T>
inline T atomic_fetch_or_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen T.

Value
Ett värde av typen T.

Order
En memory_order.

Returvärde

Värdet som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_or_explicit utför en läs-ändra-skriv-åtgärd för att ersätta det lagrade värdet Atom för med en bitvis or av Value och det aktuella värdet som lagras i Atom, inom de memory_order begränsningar som anges av Order.

atomic_fetch_sub

Subtraherar ett värde från ett befintligt värde som lagras i ett atomic objekt.

template <class T>
T* atomic_fetch_sub(
    volatile atomic<T*>* Atom,
    ptrdiff_t Value) noexcept;

template <class T>
T* atomic_fetch_sub(
    atomic<T*>* Atom,
    ptrdiff_t Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar en pekare för att skriva T.

Value
Ett värde av typen ptrdiff_t.

Returvärde

Värdet för pekaren som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_sub utför en läs-ändra-skriv-åtgärd för att atomiskt subtrahera Value från det lagrade värdet i Atom, med hjälp av villkoret memory_order.memory_order_seq_cst .

När atomtypen är atomic_address, har typen Value och åtgärden behandlar den lagrade pekaren som en ptrdiff_tchar * .

Den här åtgärden är också överbelastad för integraltyper:

integral atomic_fetch_sub(volatile atomic-integral* Atom, integral Value) noexcept;
integral atomic_fetch_sub(atomic-integral* Atom, integral Value) noexcept;

atomic_fetch_sub_explicit

Subtraherar ett värde från ett befintligt värde som lagras i ett atomic objekt.

template <class T>
T* atomic_fetch_sub_explicit(
    volatile atomic<T*>* Atom,
    ptrdiff_t Value,
    memory_order Order) noexcept;

template <class T>
T* atomic_fetch_sub_explicit(
    atomic<T*>* Atom,
    ptrdiff_t Value, memory_order Order) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar en pekare för att skriva T.

Value
Ett värde av typen ptrdiff_t.

Returvärde

Värdet för pekaren som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_sub_explicit utför en läs-ändra-skriv-åtgärd för att atomiskt subtrahera Value från det lagrade värdet i Atom, inom de memory_order begränsningar som anges av Order.

När atomtypen är atomic_address, har typen Value och åtgärden behandlar den lagrade pekaren som en ptrdiff_tchar * .

Den här åtgärden är också överbelastad för integraltyper:

integral atomic_fetch_sub_explicit(
    volatile atomic-integral* Atom,
    integral Value,
    memory_order Order) noexcept;

integral atomic_fetch_sub_explicit(
    atomic-integral* Atom,
    integral Value,
    memory_order Order) noexcept;

atomic_fetch_xor

Utför lite på ett värde och ett befintligt exclusive or värde som lagras i ett atomic objekt.

template <class T>
inline T atomic_fetch_xor(volatile atomic<T>* Atom, T Value) noexcept;

template <class T>
inline T atomic_fetch_xor(volatile atomic<T>* Atom, T Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen T.

Value
Ett värde av typen T.

Returvärde

Värdet som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_xor utför en läs-ändra-skriv-åtgärd för att ersätta det lagrade värdet för med en bitvis Atom av exclusive or och det aktuella värdet som lagras i Value, med hjälp av Atommemory_order.memory_order_seq_cst.

atomic_fetch_xor_explicit

Utför lite på ett värde och ett befintligt exclusive or värde som lagras i ett atomic objekt.

template <class T>
inline T atomic_fetch_xor_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

template <class T>
inline T atomic_fetch_xor_explicit(
    volatile atomic<T>* Atom,
    T Value,
    memory_order Order) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen T.

Value
Ett värde av typen T.

Order
En memory_order.

Returvärde

Värdet som objektet innehåller atomic omedelbart innan åtgärden utfördes.

Anmärkningar

Funktionen atomic_fetch_xor_explicit utför en läs-ändra-skriv-åtgärd för att ersätta det lagrade värdet Atom för med en bitvis exclusive or av Value och det aktuella värdet som lagras i Atom, inom de memory_order begränsningar som anges av Order.

atomic_flag_clear

bool Anger flaggan i ett atomic_flag objekt till false, inom memory_order.memory_order_seq_cst.

inline void atomic_flag_clear(volatile atomic_flag* Flag) noexcept;
inline void atomic_flag_clear(atomic_flag* Flag) noexcept;

Parameterar

Flag
En pekare till ett atomic_flag objekt.

atomic_flag_clear_explicit

bool Anger flaggan i ett atomic_flag objekt till false, inom de angivna memory_order begränsningarna.

inline void atomic_flag_clear_explicit(volatile atomic_flag* Flag, memory_order Order) noexcept;
inline void atomic_flag_clear_explicit(atomic_flag* Flag, memory_order Order) noexcept;

Parameterar

Flag
En pekare till ett atomic_flag objekt.

Order
En memory_order.

atomic_flag_test_and_set

bool Anger flaggan i ett atomic_flag objekt till true, inom begränsningarna för memory_order.memory_order_seq_cst.

inline bool atomic_flag_test_and_set(volatile atomic_flag* Flag) noexcept;
inline bool atomic_flag_test_and_set(atomic_flag* Flag) noexcept;

Parameterar

Flag
En pekare till ett atomic_flag objekt.

Returvärde

Det ursprungliga värdet för Flag.

atomic_flag_test_and_set_explicit

bool Anger flaggan i ett atomic_flag objekt till true, inom de angivna memory_order begränsningarna.

inline bool atomic_flag_test_and_set_explicit(volatile atomic_flag* Flag, memory_order Order) noexcept;
inline bool atomic_flag_test_and_set_explicit(atomic_flag* Flag, memory_order Order) noexcept;

Parameterar

Flag
En pekare till ett atomic_flag objekt.

Order
En memory_order.

Returvärde

Det ursprungliga värdet för Flag.

atomic_init

Anger det lagrade värdet i ett atomic objekt.

template <class Ty>
inline void atomic_init(volatile atomic<Ty>* Atom, Ty Value) noexcept;
template <class Ty>
inline void atomic_init(atomic<Ty>* Atom, Ty Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen Ty.

Value
Ett värde av typen Ty.

Anmärkningar

atomic_init är inte en atomisk åtgärd. Det är inte trådsäkert.

atomic_is_lock_free

Anger om atomiska åtgärder på ett atomic objekt är låsfria.

template <class T>
inline bool atomic_is_lock_free(const volatile atomic<T>* Atom) noexcept;
template <class T>
inline bool atomic_is_lock_free(const atomic<T>* Atom) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som lagrar ett värde av typen T.

Returvärde

trueom atomiska åtgärder på Atom är låsfria, annars . false

Anmärkningar

En atomisk typ är låsfri om inga atomiska åtgärder på den typen använder lås. Om den här funktionen returnerar trueär typen säker att använda i signalhanterare.

atomic_load

Hämtar det lagrade värdet i ett atomic objekt.

template <class Ty>
inline Ty atomic_load(const volatile atomic<Ty>* Atom) noexcept;
template <class Ty>
inline Ty atomic_load(const atomic<Ty>* Atom) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som innehåller ett värde av typen Ty.

Returvärde

Det hämtade värdet som lagras i Atom.

Anmärkningar

atomic_load använder memory_order.memory_order_seq_cstimplicit .

atomic_load_explicit

Hämtar det lagrade värdet i ett atomic objekt inom en angiven memory_order.

template <class Ty>
inline Ty atomic_load_explicit(const volatile atomic<Ty>* Atom, memory_order Order) noexcept;
template <class Ty>
inline Ty atomic_load_explicit(const atomic<Ty>* Atom, memory_order Order) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som innehåller ett värde av typen Ty.

Order
En memory_order. Använd inte memory_order_release eller memory_order_acq_rel.

Returvärde

Det hämtade värdet som lagras i Atom.

atomic_signal_fence

Fungerar som ett staket – en minnessynkroniseringsprimation som framtvingar ordning mellan belastnings-/lagringsåtgärder – mellan andra stängsel i en anropstråd som har signalhanterare som körs i samma tråd.

inline void atomic_signal_fence(memory_order Order) noexcept;

Parameterar

Order
En begränsning för minnesordning som avgör stängseltyp.

Anmärkningar

Argumentet Order bestämmer stängseltyp.

Värde Beskrivning
memory_order_relaxed Stängslet har ingen effekt.
memory_order_consume Staketet är ett stängsel.
memory_order_acquire Staketet är ett stängsel.
memory_order_release Staketet är ett frisläppningsstängsel.
memory_order_acq_rel Staketet är både ett stängsel och ett frisläppningsstängsel.
memory_order_seq_cst Staketet är både ett stängsel och ett frisläppningsstängsel och är sekventiellt konsekvent.

atomic_store

Atomiskt lagrar ett värde i ett atomic objekt.

template <class Ty>
inline Ty atomic_store_explicit(const volatile atomic<Ty>* Atom, Ty Value) noexcept;
template <class Ty>
inline Ty atomic_store_explicit(const atomic<Ty>* Atom, T Value) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som innehåller ett värde av typen Ty.

Value
Ett värde av typen Ty.

Anmärkningar

atomic_store lagrar Value i objektet som pekas på av Atom, inom villkoret memory_order.memory_order_seq_cst .

atomic_store_explicit

Atomiskt lagrar ett värde i ett atomic objekt.

template <class Ty>
inline Ty atomic_store_explicit(
    const volatile atomic<Ty>* Atom,
    Ty Value,
    memory_order Order) noexcept;

template <class Ty>
inline Ty atomic_store_explicit(
    const atomic<Ty>* Atom,
    T Value,
    memory_order Order) noexcept;

Parameterar

Atom
En pekare till ett atomic objekt som innehåller ett värde av typen Ty.

Value
Ett värde av typen Ty.

Order
En memory_order. Använd inte memory_order_consume, memory_order_acquireeller memory_order_acq_rel.

Anmärkningar

atomic_store lagrar Value i objektet som pekas på av Atom, inom memory_order det som anges av Order.

atomic_thread_fence

Fungerar som ett staket – en primitiv minnessynkronisering som framtvingar ordning mellan belastnings-/lagringsåtgärder – utan en associerad atomisk åtgärd.

inline void atomic_thread_fence(memory_order Order) noexcept;

Parameterar

Order
En begränsning för minnesordning som avgör stängseltyp.

Anmärkningar

Argumentet Order bestämmer stängseltyp.

Värde Beskrivning
memory_order_relaxed Stängslet har ingen effekt.
memory_order_consume Staketet är ett stängsel.
memory_order_acquire Staketet är ett stängsel.
memory_order_release Staketet är ett frisläppningsstängsel.
memory_order_acq_rel Staketet är både ett stängsel och ett frisläppningsstängsel.
memory_order_seq_cst Staketet är både ett stängsel och ett frisläppningsstängsel och är sekventiellt konsekvent.

kill_dependency

Tar bort ett beroende.

template <class Ty>
Ty kill_dependency(Ty Arg) noexcept;

Parameterar

Arg
Ett värde av typen Ty.

Returvärde

Returvärdet är Arg. Utvärderingen av Arg har inget beroende av funktionsanropet. Genom att bryta en möjlig beroendekedja kan funktionen tillåta kompilatorn att generera effektivare kod.

Se även

<atomic>