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
- Bloquear, tocar el estado compartido, desbloquear — mantén la región chica.
- Cada ruta de retorno debe desbloquear, o el siguiente hilo espera por siempre.
- Sin el lock, el incremento es una lectura, una suma y una escritura.
Palabras clave y builtins usados aquí
NULLlongreturnstructtypedefvoid
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.
Paso 1 de 4 en Bloqueos; paso 4 de 10 en Hilos y concurrencia.