typestar

Locks de lectura-escritura en C

Muchos lectores juntos, o un escritor solo.

#define _POSIX_C_SOURCE 200809L

#include <pthread.h>

typedef struct {
    int values[16];
    size_t count;
    pthread_rwlock_t lock;
} Table;

void table_init(Table *t) {
    t->count = 0;
    pthread_rwlock_init(&t->lock, NULL);
}

int table_append(Table *t, int value) {
    pthread_rwlock_wrlock(&t->lock);
    int ok = t->count < 16;
    if (ok) {
        t->values[t->count++] = value;
    }
    pthread_rwlock_unlock(&t->lock);
    return ok;
}

size_t table_size(Table *t) {
    pthread_rwlock_rdlock(&t->lock);
    size_t n = t->count;
    pthread_rwlock_unlock(&t->lock);
    return n;
}

Cómo funciona

  1. rdlock puede sostenerse por varios hilos a la vez.
  2. wrlock espera a que cada lector se vaya.
  3. Ambos se sueltan con la misma llamada unlock.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
31
Caracteres a escribir
532
Tokens
152
Ritmo de tres estrellas
105 tpm

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

Escribe este fragmento

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

← Anterior Siguiente →