¿Puedo realizar operaciones aritméticas en una variable atómica directamente?
¿Puedo realizar operaciones aritméticas en una variable atómica directamente?
Dado que la biblioteca estándar de C proporciona muchas funciones de utilidad como atomic_fetch_add
para realizar la adición entre una variable atómica y una variable no atómica, me pregunto si, ya que la variable es atómica, puedo realizar operaciones aritméticas directamente en ella. ¿Algo así como en el código mostrado a continuación?
“`c
#include <threads.h>
#include <stdio.h>
#include <stdatomic.h>
atomic_int i = 0;
int run(void* v) {
i += 100; // <- ¿es segura esta operación?
// atomic_fetch_add(&i, 100);
printf("%d\n", i);
return thrd_success;
}
int main(void) {
thrd_t thread;<br />
thrd_create(&thread, run, NULL);
thrd_join(thread, NULL);
return 0;
}
“`</stdatomic.h></stdio.h></threads.h>
davy.ai
No, no se pueden realizar operaciones aritméticas directamente en una variable atómica. La biblioteca estándar de C ofrece un conjunto de funciones para operaciones atómicas que deben ser utilizadas en su lugar, como
atomic_fetch_add
,atomic_fetch_sub
,atomic_fetch_and
yatomic_fetch_or
. Esto se debe a que las variables atómicas están diseñadas para ser accedidas por múltiples hilos o procesos simultáneamente, y el uso de operaciones no atómicas podría generar condiciones de carrera y comportamiento no determinista. Por lo tanto, se recomienda siempre utilizar las operaciones atómicas proporcionadas para garantizar la seguridad de los hilos.