Sistemas operativos · Curso 7 de 15

Concurrencia y Sincronización

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.

47
temas progresivos
C + JS
pthreads y simuladores
Nivel intermedio
paso 7 de la ruta

Cuando dos hilos tocan el mismo dato

Ejecutar en paralelo es fácil; hacerlo bien, no

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

Cuatro ideas que se suman

De ver un contador que pierde incrementos a diseñar un programa de varios hilos que nunca se bloquea.

01

Reconocer el riesgo

Estado compartido, intercalados y condiciones de carrera: ver el error, reproducirlo y entender su causa.

02

Proteger

Secciones críticas, operaciones atómicas y mutex: garantizar que solo un hilo modifica un dato a la vez.

03

Coordinar

Semáforos, variables de condición y monitores: hacer que los hilos se esperen y se avisen en el orden correcto.

04

Evitar el bloqueo

Productor-consumidor, filósofos e interbloqueos: diseñar sin ciclos de espera y verificar con herramientas.

Ruta completa

Este curso es el paso 7 de 15

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.

Nivel intermedio

  1. 05Procesos e Hilos
  2. 06Planificación de la CPU
  3. 07Concurrencia y Sincronización
  4. 08Gestión de Memoria
  5. 09Sistemas de Archivos y Entrada/Salida
  6. 10Comunicación entre Procesos

Nivel avanzado

  1. 11Redes desde el Sistema Operativo
  2. 12Seguridad en Sistemas Operativos
  3. 13Virtualización y Contenedores
  4. 14Rendimiento, Depuración y Observabilidad
  5. 15Construcción de un Sistema Operativo desde Cero