typestar

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

  1. atomic_int se incrementa de forma indivisible.
  2. atomic_fetch_add devuelve el valor previo a la suma.
  3. Los atómicos sirven para contadores y flags, no para invariantes de varios campos.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 1 de 2 en Sin bloqueos y local; paso 8 de 10 en Hilos y concurrencia.

← Anterior Siguiente →