¿Cuál es el mejor libro para aprender conceptos de concurrencia (sincronización)?

Los siguientes tres libros discuten conceptos de concurrencia, en diferentes niveles de profundidad y rigor. Estos se basan principalmente en el paradigma de hilo y memoria compartida.

Si desea comprender cómo utilizar estructuras y algoritmos de datos concurrentes, una introducción amigable pero práctica a la concurrencia es “Java Concurrency in Practice” de Goetz et al. También describe cómo evitar dificultades comunes en el rendimiento y la corrección. Una ventaja adicional es que el libro no tiene anotaciones.

Si desea saber cómo implementar estas estructuras y algoritmos de datos concurrentes, sugiero “El arte de la programación multiprocesador” de Herlihy y Shavit. Le indica cómo implementar cosas como mutexes, colas concurrentes, barreras, etc. y lo guía a través del razonamiento sobre la implementación.

Finalmente, si desea comprender cómo demostrar que estas estructuras de datos y algoritmos concurrentes son correctos, le recomiendo probar “On Concurrent Programming” de Fred Scheider. El libro es un ejercicio extendido para formalizar y probar las propiedades deseadas en una lógica temporal.