seegongsik
Sistemas operativos

Qué es una condición de carrera

Cuando dos personas cambian lo mismo en el mismo instante, el resultado puede salir mal. La respuesta es turnarse, de uno en uno.

01

Cuando dos cambian la misma casilla

En la pared hay clavada una nota con un número; ahora dice 10. Dos personas quieren sumarle 1 cada una.
Una mira el 10, calcula 11 de cabeza y escribe 11 en la nota. La otra hace exactamente lo mismo. Pero si empiezan casi en el mismo instante, las dos ven el 10 inicial y las dos escriben 11.
Como se sumó 1 dos veces, debería dar 12, pero el resultado es 11. Una suma ha desaparecido: es un accidente provocado por cambiar lo mismo en el mismo instante.
Cuando esto pasa con un número que muchos actualizan a la vez, como un contador de visitas o el saldo de una cuenta, un cambio se pierde sin hacer ruido.

10ABleer 10leer 10111111escribir 11escribir 11debía ser 12 pero 11una suma perdida

Si dos actualizan el mismo valor a la vez, una de las sumas desaparece.

Cambiar lo mismo en el mismo instante puede estropear el resultado.

02

Mismas acciones, resultados distintos

Dos personas idénticas suman 1 cada una exactamente igual; esta vez solo cambiaremos el momento.
Por turnos: una ve 10, escribe 11 y termina; luego la otra ve ese 11 y escribe 12. El resultado es 12, correcto.
Solapadas: una lee 10 y, antes de escribir, la otra también lee 10. Las dos escriben 11 y el resultado es 11, incorrecto.
Las acciones fueron literalmente idénticas. Solo el momento, cuándo se coló la otra, separó lo correcto de lo incorrecto.
Por eso estos problemas son tan difíciles de cazar: nueve de cada diez veces todo va bien y, de vez en cuando, falla una.

Por turnoA leer10B leer11escribir11escribir1212bienSuperpuestoA leer10B leer1011mal

La misma suma da bien si se hace por turnos y mal si se solapa.

Lo que decidió el resultado no fueron las acciones, sino el momento en que una se coló.

03

Solápalas tú mismo

Dos trabajadores suman 1 cada uno al mismo valor. Ajusta tú mismo cuánto se solapan sus comienzos.
Si los separas lo suficiente, uno termina antes de que empiece el otro y el resultado es correcto. Si los acercas, uno lee antes de que el otro haya escrito y una suma desaparece.
Mueve el control deslizante y busca el punto a partir del cual el resultado empieza a fallar. Son las mismas dos acciones, pero en cuanto se solapan, el resultado se viene abajo.
Incluso un solapamiento brevísimo puede hacer desaparecer una suma, así que esperar que los momentos no coincidan no es una solución de verdad.

leercambiarescribirAleercambiarescribirB
12Resultado bien
Superposición20%
Separados sale bien en 12, superpuestos se rompe a 11. Busca desde qué punto se pone rojo.

Cambia cuánto se solapan para ver cuándo empieza a fallar el resultado.

Si se separan, el resultado es correcto; cuanto más se solapan, mayor es el riesgo.

04

Por turnos, de uno en uno

¿Y cómo se evita? La respuesta es sencilla: mientras algo se está cambiando, que solo una persona lo toque.
Mientras una lee, cambia y escribe, la otra espera, y la siguiente empieza solo cuando ese bloque entero ha terminado. Es como hacer fila para un baño individual: si hay alguien dentro, la puerta está cerrada con llave, y el siguiente entra solo cuando sale.
Así nada se solapa y el resultado siempre es correcto. A cambio, aparece un tiempo de espera: se acepta una breve fila a cambio de seguridad.
La clave está en proteger juntas, como un solo bloque, las tres acciones de leer, cambiar y escribir. Si solo se bloquea el momento de escribir y se deja libre la lectura, el hueco vuelve a aparecer.

12Aen usoBesperandode a uno, sin superposiciónpero algo de espera

Mientras algo se está cambiando, solo una persona lo toca; las demás hacen fila y esperan.

Si cada uno cambia lo mismo por turnos, de uno en uno, el solapamiento desaparece y el resultado queda a salvo.

05

Resumen en una página

Solo hay que recordar tres cosas.
Primera: cambiar lo mismo en el mismo instante provoca accidentes; igual que una suma desaparece cuando dos suman a la vez, el resultado puede fallar.
Segunda: el problema es el momento, no las acciones; el mismo trabajo da bien por turnos y mal si se solapa. Tercera: turnarse de uno en uno es seguro; si mientras algo se cambia solo una persona lo toca y las demás hacen fila, el resultado siempre es correcto.
Cuando varios comparten algo y las cosas ocurren a la vez, el orden no se mantiene solo. Tenemos que fijarlo nosotros.

Uno
Arreglar lo mismo en el mismo momento causa accidentes. Dos sumando a la vez pierden una suma.
Dos
El problema es el momento, no la acción. Bien por turno, mal superpuesto.
Tres
De a uno es seguro. Solo uno lo toca mientras los demás hacen fila, así sale siempre bien.

Simultáneo + compartido es un accidente, el problema es el momento, de uno en uno es seguro.

En una líneaCambiar lo mismo a la vez puede estropear el resultado, y hacer que se turnen de uno en uno lo evita.
← Sistemas operativos
¿Te fue útil? Apoyar seegongsik