VademécumVademécum\Race conditions [carreras] (concepto)

Race conditions [carreras] (concepto)

Se dice que un programa sufre este problema cuando el resultado puede ser correcto o incorrecto dependiendo de cómo se de la casualidad de que se entrelacen los threads. Básicamente el problema aparece cuando varios threads hacen ciclos de modificación de una variable compartida (lectura + modificación + escritura) y el ciclo completo se ve interrumpido

Ejemplo:

 

thread 1 {

   x = x+5;

}

thread 2 {

   x = x+100;

}

t0

x vale 100

t1

lee 100

 

t2

incrementa a 105

 

t3

 

lee 100

t4

escribe 105

 

t5

 

incrementa a 200

t6

 

escribe 200

final

x vale 200

 

Es el problema principal que hace que los programas sean incorrectos.

Es un problema muy difícil de detectar, pues el programa puede funcionar bien millones de veces y de repente fallar porque se da una coincidencia imprevista. Es por ello que mucho esfuerzo de la programación concurrente se dedica a construir el programa de forma que no puedan haber carreras. Eso suele exigir pruebas formales de seguridad.

principio
principio