Facultad de Ciencias, UNAM

Prácticas de Cómputo Concurrente

Enunciados en HTML y PDF, códigos en Java, notas de apoyo y bibliografía

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.