Las prácticas
El recorrido completo del curso, de los primeros hilos hasta la comparación entre lenguajes. Cada práctica trae el enunciado en HTML (con la bibliografía enlazada), el PDF para imprimir y los códigos de ejemplo.
Práctica 1
Repaso de Java e introducción a la programación multihilos
Arquitecturas multihilo y multiprocesador, anatomía de la JVM,
creación de hilos con Thread y Runnable, y la Ley de Amdahl.
Práctica 2
Exclusión mutua: locks y pools en Java
Condiciones de carrera y data races, synchronized,
la interfaz Lock y pools de hilos con ExecutorService.
Práctica 3
Candados clásicos y el modelo de memoria de Java
Peterson, Lamport y compañía; reordenamiento, visibilidad y qué garantiza realmente el JMM.
Práctica 4
Spinlocks y algunas primitivas
TAS, TTAS, backoff exponencial y candados de cola. Comparación empírica de desempeño.
Práctica 5
Monitores: candados y condiciones
Variables de condición, await/signal,
spurious y lost wakeups, candados de lectores/escritores e inanición.
Práctica 6
Monitores y consenso
Sistemas síncronos, asíncronos y parcialmente síncronos; monitores, variables de condición y el problema del consenso.
Práctica 7
Implementaciones de contadores: corrección vs. eficiencia
Contador linealizable, sloppy counter y contador con balanceador. Linealizabilidad, consistencia secuencial, quiescente y eventual.
Práctica 8
De Java a Rust y Clojure: paradigmas de concurrencia
Ownership y fearless concurrency en Rust, STM en Clojure, y data races útiles. Con smart contracts como caso de estudio.
Material extra
Notas y guías que no forman parte de una práctica pero acompañan al curso.
Material extra
Snapshots y collects: backups
Linealizabilidad, collects atómicos, double-collect y verificación en tiempo de ejecución.
Nota
Monitores y variables de condición — ejemplos en Java
Ejemplos autocontenidos con wait/notify
y las condiciones de la interfaz Lock.
Nota
Construyendo un candado reentrante desde cero
Cómo se implementa la reentrancia paso a paso, partiendo de un candado simple.
Nota
Paralelismo con OpenMP
Memoria compartida fuera de la JVM: directivas, regiones paralelas, reducciones y análisis de escalabilidad.
Listas concurrentes
Implementaciones de listas para el curso
Listas con candado grueso, fino, optimista, perezoso y sin candados.
Guía
Cómo entregar tus ejercicios por GitHub
Clonar, hacer commit, subir cambios y los errores más comunes.
Bibliografía
Obras citadas en el curso
Las 23 referencias de todas las prácticas, con enlace a dónde se citan
y el archivo .bib descargable.