Reconocer el riesgo
Estado compartido, intercalados y condiciones de carrera: ver el error, reproducirlo y entender su causa.
Sistemas operativos · Curso 7 de 15
Una guía práctica para escribir programas que ejecutan tareas en paralelo sin corromper datos. Aprenderás condiciones de carrera, secciones críticas, operaciones atómicas, mutex, semáforos, variables de condición y monitores, los problemas clásicos del productor-consumidor, lectores-escritores y la cena de los filósofos, y la detección, prevención y evasión de interbloqueos, con ejemplos desarrollados en C con pthreads y simulaciones en JavaScript.
Cuando dos hilos tocan el mismo dato
Un programa con varios hilos puede aprovechar todos los núcleos del equipo, pero en cuanto dos de ellos leen y escriben el mismo dato el resultado deja de depender del código y pasa a depender del azar: del orden en que el planificador los intercala. Los errores aparecen de vez en cuando, desaparecen al depurar y rara vez se repiten dos veces igual. Escribir código concurrente correcto exige entender qué puede ocurrir en cada intercalado posible.
El curso empieza por ver la condición de carrera con un programa real y por definir la sección crítica. Sigue con las herramientas, de la más básica a la más expresiva: operaciones atómicas, mutex, semáforos, variables de condición y monitores. Con ellas resuelve los problemas clásicos, productor-consumidor, lectores-escritores y la cena de los filósofos, y estudia el peor fallo de la sincronización: el interbloqueo, con sus técnicas de prevención, evasión y detección. Los ejemplos se escriben en C con pthreads y se ejecutan en Linux; los algoritmos se estudian además en simulaciones interactivas en JavaScript.
El recorrido
De ver un contador que pierde incrementos a diseñar un programa de varios hilos que nunca se bloquea.
Estado compartido, intercalados y condiciones de carrera: ver el error, reproducirlo y entender su causa.
Secciones críticas, operaciones atómicas y mutex: garantizar que solo un hilo modifica un dato a la vez.
Semáforos, variables de condición y monitores: hacer que los hilos se esperen y se avisen en el orden correcto.
Productor-consumidor, filósofos e interbloqueos: diseñar sin ciclos de espera y verificar con herramientas.
Ruta completa
Aquí se estudia cómo coordinar hilos que comparten datos. En el curso siguiente se ve cómo el sistema administra la memoria que todos ellos usan.