typestar

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

  1. pthread_cond_wait suelta el mutex mientras espera.
  2. La espera debe ir dentro de un bucle, porque hay despertares espurios.
  3. signal despierta a un hilo en espera; broadcast, a todos.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

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

← Anterior Siguiente →