Atómicos de C11 en C
stdatomic te da un contador que no necesita ningún lock.
#include <stdatomic.h>
#include <stdio.h>
static atomic_long hits = 0;
static atomic_flag busy = ATOMIC_FLAG_INIT;
void record(void) {
long previous = atomic_fetch_add(&hits, 1);
(void) previous;
}
long read_hits(void) {
return atomic_load(&hits);
}
int try_enter(void) {
return !atomic_flag_test_and_set(&busy);
}
void leave(void) {
atomic_flag_clear(&busy);
}
Cómo funciona
atomic_intse incrementa de forma indivisible.atomic_fetch_adddevuelve el valor previo a la suma.- Los atómicos sirven para contadores y flags, no para invariantes de varios campos.
Palabras clave y builtins usados aquí
atomic_longintlongreturnstaticvoid
El intento, en números
- Líneas
- 22
- Caracteres a escribir
- 366
- Tokens
- 83
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 47 segundos.
Paso 1 de 2 en Sin bloqueos y local; paso 8 de 10 en Hilos y concurrencia.