Variables de condición en C
Un hilo espera hasta que otro le avisa que llegó el estado que necesita.
#include <pthread.h>
typedef struct {
int ready;
pthread_mutex_t lock;
pthread_cond_t cond;
} Gate;
void gate_init(Gate *g) {
g->ready = 0;
pthread_mutex_init(&g->lock, NULL);
pthread_cond_init(&g->cond, NULL);
}
void gate_wait(Gate *g) {
pthread_mutex_lock(&g->lock);
while (!g->ready) {
pthread_cond_wait(&g->cond, &g->lock);
}
pthread_mutex_unlock(&g->lock);
}
void gate_open(Gate *g) {
pthread_mutex_lock(&g->lock);
g->ready = 1;
pthread_cond_broadcast(&g->cond);
pthread_mutex_unlock(&g->lock);
}
Cómo funciona
pthread_cond_waitsuelta el mutex mientras espera.- La espera debe ir dentro de un bucle, porque hay despertares espurios.
signaldespierta a un hilo en espera;broadcast, a todos.
Palabras clave y builtins usados aquí
NULLintstructtypedefvoidwhile
El intento, en números
- Líneas
- 28
- Caracteres a escribir
- 505
- Tokens
- 151
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 86 segundos.
Paso 4 de 4 en Bloqueos; paso 7 de 10 en Hilos y concurrencia.