funct

NOMBRE
Sintaxis
ARGUMENTOS
DESCRIPCIÃN
CONSIDERACIONES EN TIEMPO REAL
VALOR DEVUELTO
VER TAMBIÃN

NOMBRE

rtapi_atomic - subconjunto de C11 <stdatomic.h>

Sintaxis

#include <rtapi_atomic.h>

enum memory_order {...};

#define atomic_store(obj, desired)...

#define atomic_store_explicit(obj, desired, order)...

#define atomic_load(obj)...

#define atomic_load_explicit(obj, order)...

ARGUMENTOS

volatile A* obj

Un puntero a un objeto volátil que es el destino del almacenamiento o la fuente de la carga. El puntero debe tener un tipo y una alineación apropiados, tal que la operación de almacenamiento o carga subyacente en sà sea atómica; como mÃ- nimo, se puede suponer que un "int" correctamente alineado es de ese tipo. Un tamaño o alineación incorrecto son errores no diagnosticados.

C fRdesired

El valor que se almacenará en el objeto. "*obj = desired" debe estar bien formado.

memory_order order

La semántica requerida de orden de memoria.

DESCRIPCIÃN

Este encabezado proporciona al menos el subconjunto de <stdatomic.h> de C11 dado anteriormente. Cuando existe un requisito de orden para múltiples valores leÃdos o escritos en áreas de memoria compartida RTAPI por otros hilos, incluidos los valores de pines y parámetros HAL, estas funciones (o macros similares a funciones) son la única forma de garantizar que se cumpla el requisito de orden. De lo contrario, de acuerdo con las reglas especÃficas de la arquitectura, las cargas y almacenamientos se pueden reordenar desde su orden normal del código fuente.

Por ejemplo, para dejar un mensaje en un área de memoria compartida desde un hilo y recuperarlo desde otro, el escritor debe usar un almacenamiento atómico para la variable "message is complete", y el lector debe usar una carga atómica cuando verifique esa variable:

// productor
*mensaje = 42;
atomic_store_explicit(message_ready, 1, memory_order_release);

// consumidor
while(atomic_load_explicit(message_ready, memory_order_acquire) == 0) sched_yield();
printf ("el mensaje era %d\n", *message); //debe imprimir 42

CONSIDERACIONES EN TIEMPO REAL

Se puede llamar desde cualquier código.

VALOR DEVUELTO

atomic_load y atomic_load_explicit devuelve el valor señalado por el argumento obj.

atomic_store y atomic_store_explicit No tienen valor de retorno.

VER TAMBIÃN

<stdatomic.h> (C11), <rtapi_bitops.h>(para otras operaciones de memoria atómica compatibles con rtapi)