atomic_exchange, atomic_exchange_explicit
|
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
|
|