Namespaces
Variants

atomic_exchange, atomic_exchange_explicit

From cppreference.net
Definido en el encabezado <stdatomic.h>
C atomic_exchange ( volatile A * obj, C desired ) ;
(1) (desde C11)
C atomic_exchange_explicit ( volatile A * obj, C desired, memory_order order ) ;
(2) (desde C11)

Reemplaza atómicamente el valor apuntado por obj con desired y retorna el valor que obj contenía previamente. La operación es de tipo lectura-modificación-escritura. La primera versión ordena los accesos a memoria según memory_order_seq_cst , la segunda versión ordena los accesos a memoria según order .

Esta es una función genérica definida para todos los tipos de objetos atómicos A . El argumento es un puntero a un tipo atómico volátil para aceptar direcciones de objetos atómicos tanto no volátiles como volátiles (por ejemplo, E/S mapeadas en memoria), y se preserva la semántica volátil cuando se aplica esta operación a objetos atómicos volátiles. C es el tipo no atómico correspondiente a A .

No está especificado si el nombre de una función genérica es una macro o un identificador declarado con vinculación externa. Si se suprime una definición de macro para acceder a una función real (por ejemplo, entre paréntesis como ( atomic_exchange ) ( ... ) ), o un programa define un identificador externo con el nombre de una función genérica, el comportamiento no está definido.

Contenidos

Parámetros

obj - puntero al objeto atómico a modificar
desired - valor con el que reemplazar el objeto atómico
order - orden de sincronización de memoria para esta operación: se permiten todos los valores

Valor de retorno

El valor mantenido previamente por el objeto atómico apuntado por obj .

Referencias

  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.17.7.3 Las funciones genéricas atomic_exchange (p: 207)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.17.7.3 Las funciones genéricas atomic_exchange (p: 283)

Véase también

intercambia un valor con un objeto atómico si el valor antiguo coincide con lo esperado, de lo contrario lee el valor antiguo
(función)
Documentación de C++ para atomic_exchange , atomic_exchange_explicit