Paul E. McKenney — el desarrollador del núcleo Linux que creó el mecanismo de sincronización RCU (Read-Copy-Update) — mantiene un libro de texto en línea gratuito titulado «Is Parallel Programming Hard, And, If So, What Can You Do About It?». La versión actual es la v2026.06.21a, disponible en formatos PDF de doble columna, columna único y libro electrónico bajo una licencia Creative Commons Atribución-CompartirIgual 3.0 de Estados Unidos, con un árbol git en kernel.org para parches y actualizaciones.

Un revisor en ahelwer.ca, cuyo trabajo profesional se centró durante una década en TLA⁺ y sistemas distribuidos, leyó el libro de texto durante unas vacaciones familiares canadienses y escribió una evaluación sincera. El revisor se adentró en el libro con la esperanza de transitar del trabajo de métodos formales a la programación concurrente, motivado por una charla en la conferencia Software Should Work 2026 sobre la dificultad de escribir un recolector de basura concurrente sin bloqueo.

El revisor encontró los capítulos iniciales bien ritmados: el capítulo 3, «Hardware and its Habits», recorre el comportamiento de la caché de CPU, incluyendo una cuenta simplificada de un núcleo escribiendo a una dirección que falla en la caché. Pero señala una brecha: el protocolo de coherencia de caché MESI aparece solo en el apéndice; sin embargo, entenderlo transformó el resto del libro para ellos — incluyente la realización de que, en x86, dos núcleos no pueden escribir literalmente la misma línea de caché simultáneamente, porque la propiedad exclusiva debe transferirse entre núcleos.

El capítulo 4, «Tools of the Trade», cubre lo que el revisor llama «doble problema»: optimizaciones del compilador que rompen el código paralelo (rotura de carga, rotura de almacenamiento, cargas y almacenamientos inventados, eliminación de código muerto) y, por encima de eso, el reordenamiento de ejecución de CPU. El revisor señala que el capítulo es centrado en el núcleo Linux y presta poca atención al trabajo de modelo de memoria C++11/C11 (macros std::memory_order, ACCESS_ONCE, WRITE_ONCE), que tuvo que buscar en otra parte.

El capítulo 5, «Counting», es el punto alto del revisor. Compara aproximadamente diez formas de que múltiples hilos incrementen un contaador compartido, descartando la obvia versión de incremento atómico temprano por razones de rendimiento. El capítulo introduce contadores estadísticos por hilo (relacionados con tipos de datos replicados libres de conflicto, o conflict-free replicated datatypes) como forma de evitar la falsa compartición, y culmina en un «signal-theft limit counter» que el revisor admite no haber entendido del todo.

En general, el revisor considera el libro de texto excelente — no porque sea fácil, sino porque generó un «ansia» de aprender más: ordenación release-consume, valores out-of-thin-air, el modelo de memoria débil del DEC Alpha, pruebas de simulación determinista de algoritmos sin bloqueo y atómicos preemptionables en ARM pre-v8. El revisor planea estudiar recolección de basura de alto rendimiento a continuación.