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
rdlockpuede sostenerse por varios hilos a la vez.wrlockespera a que cada lector se vaya.- Ambos se sueltan con la misma llamada
unlock.
Palabras clave y builtins usados aquí
NULLifintreturnsize_tstructtypedefvoid
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.
Paso 3 de 4 en Bloqueos; paso 6 de 10 en Hilos y concurrencia.