Hilos y concurrencia
10 pasos en 4 series de C.
Hilos en C11, más los mutexes y las variables de condición que evitan que se destruyan entre sí. Luego atómicos y almacenamiento local por hilo para los casos en que bloquear sale demasiado caro.
Diez pasos. Corto, y calladamente el tour más peligroso de todos: nada en el lenguaje te va a avisar cuando lo hayas hecho mal.
Arrancar hilos
- Crear hilospthread_create arranca un hilo corriendo una función; pthread_join lo espera.
- Pasarle trabajo a un hiloUn struct de argumentos por hilo, para que nada se comparta por accidente.
- Hilos detachedUn hilo detached limpia tras de sí, y nunca puede esperarse con join.
Bloqueos
- MutexesUn mutex serializa el acceso: dos hilos nunca actualizan el contador a la vez.
- La carrera que no puedes verEl mismo incremento con y sin lock, corrido suficientes veces para perder conteos.
- Locks de lectura-escrituraMuchos lectores juntos, o un escritor solo.
- Variables de condiciónUn hilo espera hasta que otro le avisa que llegó el estado que necesita.
Sin bloqueos y local
- Atómicos de C11stdatomic te da un contador que no necesita ningún lock.
- Almacenamiento local por hilo_Thread_local le da a cada hilo su propia copia de una variable.
Bis
- thread_pool.cUn pool fijo de workers sacando trabajos de una cola compartida hasta que cierra.