es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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>

Tags:  , , , ,

Answer

  1. Avatar for 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 y atomic_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.

Comments are closed.