typestar

Mutexes en C

Un mutex serializa el acceso: dos hilos nunca actualizan el contador a la vez.

#include <pthread.h>

typedef struct {
    long count;
    pthread_mutex_t lock;
} Counter;

void counter_init(Counter *c) {
    c->count = 0;
    pthread_mutex_init(&c->lock, NULL);
}

void counter_add(Counter *c, long n) {
    pthread_mutex_lock(&c->lock);
    c->count += n;
    pthread_mutex_unlock(&c->lock);
}

long counter_read(Counter *c) {
    pthread_mutex_lock(&c->lock);
    long value = c->count;
    pthread_mutex_unlock(&c->lock);
    return value;
}

void counter_destroy(Counter *c) {
    pthread_mutex_destroy(&c->lock);
}

Cómo funciona

  1. Bloquear, tocar el estado compartido, desbloquear — mantén la región chica.
  2. Cada ruta de retorno debe desbloquear, o el siguiente hilo espera por siempre.
  3. Sin el lock, el incremento es una lectura, una suma y una escritura.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
28
Caracteres a escribir
492
Tokens
136
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 78 segundos.

Escribe este fragmento

Paso 1 de 4 en Bloqueos; paso 4 de 10 en Hilos y concurrencia.

← Anterior Siguiente →

Mutexes en otros lenguajes