 ##  [Condición de Carrera (Race Condition)](/es/node/58923) 

 Definición

Un fallo de concurrencia en el que el comportamiento o resultado del programa depende del orden o temporización relativa de operaciones sobre recursos compartidos, de modo que distintos intercalados producen resultados distintos, algunos incorrectos o inseguros.

 

 

 

 

 

 





## Principio

Principio

Cuando múltiples agentes concurrentes (hilos, procesos, interrupciones) acceden y al menos uno modifica estado compartido sin sincronización adecuada, la falta de un orden definido hace que los resultados sean no deterministas y sensibles al planificador, caches o I/O.

 

 

 

 

 





## Demostración

Demostración

Dos hilos incrementan un contador compartido leyendo, incrementando y escribiendo sin operaciones atómicas ni bloqueos; los intercalados pueden perder incrementos (lost updates). Un TOCTOU clásico ocurre cuando se comprueba la existencia de un archivo y luego se usa, mientras otro hilo cambia el archivo entre la comprobación y el uso.

 

 

 

 

## Aplicación incorrecta

Aplicación incorrecta

Llamar 'condición de carrera' a cualquier fallo intermitente sin demostrar interacciones dependientes del tiempo, o asumir que añadir sleeps reproducirá o arreglará el problema; también creer que los locks eliminan siempre el riesgo sin considerar deadlocks o inversión de prioridad.

 

 

 

 

 





## Consecuencia

Consecuencia

Reconocer correctamente condiciones de carrera conduce a sincronización apropiada (locks, atómicos, transacciones) o rediseño hacia la inmutabilidad, produciendo comportamiento determinista; sin resolver causan fallos intermitentes, corrupción de datos o vulnerabilidades difíciles de reproducir.

 

 

 

 

## Inversión

Inversión

Serializar el acceso al recurso compartido, usar primitivos atómicos, paso de mensajes o diseñar estructuras de datos inmutables revierte la no determinación al imponer un orden bien definido o eliminar el estado mutable compartido.

 

 

 

 

 





## Límite

Límite

Incluye data races y condiciones de carrera de más alto nivel; se distingue de deadlock y livelock (donde el progreso se detiene o gira en vacío) y del nondeterminismo puramente algorítmico que no proviene de accesos compartidos no sincronizados.

 

 

 

 

 





## Tensión semántica

Tensión semántica

Hay tensión entre 'data race' (acceso a memoria de bajo nivel no sincronizado) y la 'race condition' más amplia (que puede incluir orden de operaciones de nivel superior). También hay tensión al atribuir nondeterminismo observado a concurrencia frente a causas ambientales.

 

 

 

 

 





## Síntesis

Síntesis

Una condición de carrera es un fallo sensible al tiempo en concurrencia donde el acceso no sincronizado a estado compartido produce resultados no deterministas y posiblemente incorrectos; se demuestra con updates perdidos o TOCTOU, se malatribuye si no se muestra el timing, y se aborda con sincronización, atómicos o cambios de diseño que restauran el determinismo.