Compartir a través de


funciones<atomic>

atomic_compare_exchange_strong
atomic_compare_exchange_strong_explicit
atomic_compare_exchange_weak
atomic_compare_exchange_weak_explicit
atomic_exchange
atomic_exchange_explicit
atomic_fetch_add
atomic_fetch_add_explicit
atomic_fetch_and
atomic_fetch_and_explicit
atomic_fetch_or
atomic_fetch_or_explicit
atomic_fetch_sub
atomic_fetch_sub_explicit
atomic_fetch_xor
atomic_fetch_xor_explicit
atomic_flag_clear
atomic_flag_clear_explicit
atomic_flag_test_and_set
atomic_flag_test_and_set_explicit
atomic_init
atomic_is_lock_free
atomic_load
atomic_load_explicit
atomic_signal_fence
atomic_store
atomic_store_explicit
atomic_thread_fence
kill_dependency

atomic_compare_exchange_strong

Realiza una operación atómica de comparación e intercambio.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo Ty.

Exp
Puntero a un valor de tipo Ty.

Value
Valor de tipo Ty.

Valor devuelto

true si los valores son iguales; de lo contrario, es false.

Comentarios

Este método realiza una operación atómica de comparación e intercambio mediante los argumentos implícitos memory_order.memory_order_seq_cst. Para obtener más información, vea atomic_compare_exchange_strong_explicit.

atomic_compare_exchange_strong_explicit

Realiza una atomic compare and exchange operación.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo Ty.

Exp
Puntero a un valor de tipo Ty.

Value
Valor de tipo Ty.

Order1
Primer argumento memory_order.

Order2
Segundo argumento memory_order. El valor de Order2 no puede ser memory_order_release o memory_order_acq_rel, ni puede ser más seguro que el valor de Order1.

Valor devuelto

true si los valores son iguales; de lo contrario, es false.

Comentarios

Una atomic compare and exchange operation compara el valor almacenado en el objeto al que apunta Atom con el valor al que apunta Exp. Si los valores son iguales, el valor almacenado en el objeto al que apunta Atom se sustituye por Value mediante el uso de una operación de lectura-modificación-escritura y la aplicación de las restricciones de ordenación de memoria especificadas por Order1. Si los valores no son iguales, la operación reemplaza el valor al que apunta Exp con el valor almacenado en el objeto al que apunta Atom y aplica las restricciones de ordenación de memoria especificadas por Order2.

atomic_compare_exchange_weak

Realiza una operación atómica débil de comparación e intercambio.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo Ty.

Exp
Puntero a un valor de tipo Ty.

Value
Valor de tipo Ty.

Valor devuelto

true si los valores son iguales; de lo contrario, es false.

Comentarios

Este método realiza una operación atómica débil de comparación e intercambio que tiene argumentos implícitos memory_order.memory_order_seq_cst. Para obtener más información, vea atomic_compare_exchange_weak_explicit.

atomic_compare_exchange_weak_explicit

Realiza una operación atómica débil de comparación e intercambio.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo Ty.

Exp
Puntero a un valor de tipo Ty.

Value
Valor de tipo Ty.

Order1
Primer argumento memory_order.

Order2
Segundo argumento memory_order. El valor de Order2 no puede ser memory_order_release o memory_order_acq_rel, ni puede ser más seguro que el valor de Order1.

Valor devuelto

true si los valores son iguales; de lo contrario, es false.

Comentarios

Los tipos fuertes y débiles de una garantía atomic compare and exchange operation que no almacenan el nuevo valor si los valores esperados y actuales no son iguales. El tipo fuerte garantiza que almacenará el nuevo valor si los valores esperados y actuales son iguales. A veces, el tipo débil puede devolver false y no almacenar el nuevo valor incluso si los valores actuales y esperados son iguales. En otras palabras, la función devolverá false, pero un examen posterior del valor esperado podría revelar que no cambió y, por lo tanto, debería haberse comparado como igual.

atomic_exchange

Usa Value para sustituir el valor almacenado de 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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo Ty.

Value
Valor de tipo Ty.

Valor devuelto

Valor almacenado de Atom antes del intercambio.

Comentarios

La función atomic_exchange realiza una operación de lectura-modificación-escritura para intercambiar el valor almacenado en Atom con Value mediante memory_order.memory_order_seq_cst.

atomic_exchange_explicit

Reemplaza el valor almacenado de Atom con 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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo Ty.

Value
Valor de tipo Ty.

Order
Un objeto memory_order.

Valor devuelto

Valor almacenado de Atom antes del intercambio.

Comentarios

La función atomic_exchange_explicit realiza una operación de lectura-modificación-escritura para intercambiar el valor almacenado en Atom con Value, dentro de las restricciones de memoria especificadas por Order.

atomic_fetch_add

Agrega un valor a un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un puntero al tipo T.

Value
Valor de tipo ptrdiff_t.

Valor devuelto

Valor del puntero incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_add realiza una operación de lectura-modificación-escritura para agregar de forma atómica Value al valor almacenado en Atom mediante la restricción memory_order.memory_order_seq_cst.

Si el tipo atómico es atomic_address, Value tiene un tipo ptrdiff_t y la operación trata el puntero almacenado como char *.

Esta operación también está sobrecargada en los tipos de entero:

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

Agrega un valor a un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un puntero al tipo T.

Value
Valor de tipo ptrdiff_t.

Valor devuelto

Valor del puntero incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_add_explicit realiza una operación de lectura-modificación-escritura para agregar de forma atómica Value al valor almacenado en Atom, dentro de las restricciones memory_order que están especificadas por Order.

Si el tipo atómico es atomic_address, Value tiene un tipo ptrdiff_t y la operación trata el puntero almacenado como char *.

Esta operación también está sobrecargada en los tipos de entero:

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

Realiza una operación & bit a bit sobre un valor y un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo T.

Value
Valor de tipo T.

Valor devuelto

Valor incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_and realiza una operación de lectura-modificación-escritura para sustituir el valor almacenado de Atom con un proceso bit a bit & de Value y el valor actual almacenado en Atom mediante la restricción memory_order.memory_order_seq_cst.

atomic_fetch_and_explicit

Realiza una operación & bit a bit de un valor y un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo T.

Value
Valor de tipo T.

Order
Un objeto memory_order.

Valor devuelto

Valor incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_and_explicit realiza una operación de lectura-modificación-escritura para reemplazar el valor almacenado de Atom con un proceso bit a bit & de Value y el valor actual almacenado en Atom, dentro de las restricciones de memoria especificadas por Order.

atomic_fetch_or

Realiza una operación or bit a bit sobre un valor y un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo T.

Value
Valor de tipo T.

Valor devuelto

Valor incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_or realiza una operación de lectura-modificación-escritura para sustituir el valor almacenado de Atom con un proceso bit a bit or de Value y el valor actual almacenado en Atom mediante memory_order.memory_order_seq_cst.

atomic_fetch_or_explicit

Realiza una operación or bit a bit sobre un valor y un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo T.

Value
Valor de tipo T.

Order
Un objeto memory_order.

Valor devuelto

Valor incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_or_explicit realiza una operación de lectura-modificación-escritura para reemplazar el valor almacenado de Atom con un proceso bit a bit or de Value y el valor actual almacenado en Atom, dentro de las restricciones de memory_order especificadas por Order.

atomic_fetch_sub

Resta un valor de un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un puntero al tipo T.

Value
Valor de tipo ptrdiff_t.

Valor devuelto

Valor del puntero incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_sub realiza una operación de lectura-modificación-escritura para restar de forma atómica Value del valor almacenado en Atom mediante la restricción memory_order.memory_order_seq_cst.

Si el tipo atómico es atomic_address, Value tiene un tipo ptrdiff_t y la operación trata el puntero almacenado como char *.

Esta operación también está sobrecargada en los tipos de entero:

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

Resta un valor de un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un puntero al tipo T.

Value
Valor de tipo ptrdiff_t.

Valor devuelto

Valor del puntero incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_sub_explicit realiza una operación de lectura-modificación-escritura para restar Value de forma atómica del valor almacenado en Atom, dentro de las restricciones memory_order especificadas por Order.

Si el tipo atómico es atomic_address, Value tiene un tipo ptrdiff_t y la operación trata el puntero almacenado como char *.

Esta operación también está sobrecargada en los tipos de entero:

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

Realiza una operación exclusive or bit a bit sobre un valor y un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo T.

Value
Valor de tipo T.

Valor devuelto

Valor incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_xor realiza una operación de lectura-modificación-escritura para sustituir el valor almacenado de Atom con un proceso bit a bit exclusive or de Value y el valor actual almacenado en Atom mediante memory_order.memory_order_seq_cst.

atomic_fetch_xor_explicit

Realiza una operación bit a bit de exclusive or sobre un valor y un valor existente almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo T.

Value
Valor de tipo T.

Order
Un objeto memory_order.

Valor devuelto

Valor incluido en el objeto atomic inmediatamente antes de que se realizara la operación.

Comentarios

La función atomic_fetch_xor_explicit realiza una operación de lectura-modificación-escritura para reemplazar el valor almacenado de Atom con un proceso bit a bit exclusive or de Value y el valor actual almacenado en Atom, dentro de las restricciones de memory_order especificadas por Order.

atomic_flag_clear

Establece la marca bool en un objeto atomic_flag en false, dentro de 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;

Parámetros

Flag
Puntero a un objeto atomic_flag .

atomic_flag_clear_explicit

Establece la marca bool en un objeto atomic_flag en false, dentro de las restricciones especificadas memory_order.

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;

Parámetros

Flag
Puntero a un objeto atomic_flag .

Order
memory_order.

atomic_flag_test_and_set

Establece la marca bool en un objeto atomic_flag en true, dentro de las restricciones de la 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;

Parámetros

Flag
Puntero a un objeto atomic_flag .

Valor devuelto

Valor inicial de Flag.

atomic_flag_test_and_set_explicit

Establece la marca bool en un objeto atomic_flag en true, dentro de las restricciones especificadas memory_order.

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;

Parámetros

Flag
Puntero a un objeto atomic_flag .

Order
Un objeto memory_order.

Valor devuelto

Valor inicial de Flag.

atomic_init

Establece el valor almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo Ty.

Value
Valor de tipo Ty.

Comentarios

atomic_init no es una operación atómica. No es seguro para subprocesos.

atomic_is_lock_free

Especifica si las operaciones atómicas sobre un objeto atomicno tienen bloqueos.

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;

Parámetros

Atom
Puntero a un objeto atomic que almacena un valor de tipo T.

Valor devuelto

true si las operaciones atómicas sobre Atom no tienen bloqueos; de lo contrario, false.

Comentarios

Un tipo atómico no tiene bloqueos si ninguna operación atómica sobre ese tipo emplea bloqueos. Si esta función devuelve true, el tipo se puede usar con seguridad en identificadores de señales.

atomic_load

Recupera el valor almacenado en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que contiene un valor de tipo Ty.

Valor devuelto

Valor recuperado que se almacena en Atom.

Comentarios

atomic_load usa implícitamente la memory_order.memory_order_seq_cst.

atomic_load_explicit

Recupera el valor almacenado en un objeto atomic, dentro de una memory_order especificada.

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;

Parámetros

Atom
Puntero a un objeto atomic que contiene un valor de tipo Ty.

Order
memory_order. No utilice memory_order_release ni memory_order_acq_rel.

Valor devuelto

Valor recuperado que se almacena en Atom.

atomic_signal_fence

Actúa como una barrera, (una primitiva sincronización de memoria que aplica el orden entre operaciones de carga o almacenamiento), entre otras barreras de un subproceso de llamada que tienen identificadores de señales que se ejecutan en el mismo subproceso.

inline void atomic_signal_fence(memory_order Order) noexcept;

Parámetros

Order
Restricción de ordenación de memoria que determina el tipo de barrera.

Comentarios

El argumento Order determina el tipo de barrera.

Valor Descripción
memory_order_relaxed La barrera no tiene ningún efecto.
memory_order_consume Es una barrera de adquisición.
memory_order_acquire Es una barrera de adquisición.
memory_order_release Es una barrera de liberación.
memory_order_acq_rel Es una barrera de adquisición y de liberación.
memory_order_seq_cst Es una barrera de adquisición y de liberación, y es coherente secuencialmente.

atomic_store

Almacena de forma atómica un valor en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que contiene un valor de tipo Ty.

Value
Valor de tipo Ty.

Comentarios

atomic_store almacena Value en el objeto al que apunta Atom, dentro de la restricción memory_order.memory_order_seq_cst.

atomic_store_explicit

Almacena de forma atómica un valor en un objeto atomic.

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;

Parámetros

Atom
Puntero a un objeto atomic que contiene un valor de tipo Ty.

Value
Valor de tipo Ty.

Order
memory_order. No utilice memory_order_consume, memory_order_acquire ni memory_order_acq_rel.

Comentarios

atomic_store almacena Value en el objeto al que apunta Atom, dentro del memory_order especificado por Order.

atomic_thread_fence

Actúa como una barrera, (una primitiva sincronización de memoria que aplica orden entre las operaciones de carga o almacenamiento), sin una operación atómica asociada.

inline void atomic_thread_fence(memory_order Order) noexcept;

Parámetros

Order
Restricción de ordenación de memoria que determina el tipo de barrera.

Comentarios

El argumento Order determina el tipo de barrera.

Valor Descripción
memory_order_relaxed La barrera no tiene ningún efecto.
memory_order_consume Es una barrera de adquisición.
memory_order_acquire Es una barrera de adquisición.
memory_order_release Es una barrera de liberación.
memory_order_acq_rel Es una barrera de adquisición y de liberación.
memory_order_seq_cst Es una barrera de adquisición y de liberación, y es coherente secuencialmente.

kill_dependency

Quita una dependencia.

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

Parámetros

Arg
Valor de tipo Ty.

Valor devuelto

El valor devuelto es Arg. La evaluación de Arg no tiene una dependencia a la llamada de función. Al romper una posible cadena de dependencia, la función podría permitir que el compilador generara código más eficaz.

Consulte también

<atomic>