/* Page prose (es) */
"Overview" = "# Riesgos de la concurrencia\n\nHas sacado trabajo del hilo principal con colas, esperado lotes con grupos de despacho y racionado el acceso con semáforos. Ahora, los filos afilados. En el momento en que dos piezas de trabajo tocan el *mismo* valor al mismo tiempo, aparece una nueva clase de error: uno que pasa todas las pruebas en tu máquina, se publica, y luego corrompe un número para un usuario de cada mil. Imagina un banco con ventanillas de turno: un único saldo compartido, una fila de cajeros, todos metiendo la mano en el cajón a la vez. Este capítulo trata de qué sale mal cuando no se coordinan, y las herramientas clásicas que los vuelven seguros.\n\n---\n\n## Qué aprenderás\n\n* Qué son una **condición de carrera** y una **carrera de datos**, y cómo detectar una leyendo código.\n* Por qué las carreras son **no deterministas** (correctas en la mayoría de las ejecuciones, incorrectas en algunas) y por eso tan brutalmente difíciles de reproducir.\n* Dos soluciones clásicas: canalizar las escrituras a través de una **cola serial**, o usar una **cola concurrente con una `.barrier`** (el patrón lectores-escritores).\n* Qué es un **interbloqueo**, y el error de una línea que congela una app para siempre.\n* Qué es la **inversión de prioridad**, en términos sencillos.\n* Una lista de comprobación para razonar sobre la seguridad entre hilos sin ejecutar nada.\n\nCuando quieras, pasa a la página siguiente y romperemos a propósito el saldo compartido de un banco.\n\npágina 1 de 9  |  [Siguiente: La carrera de datos](@next)";
