Skip to content

5 Orden en Ejecución

Orden en Ejecución

En un programa secuencial el orden de ejecución de las instrucciones está establecido por el código del mismo y los datos que maneja. Es decir, si ejecutamos varias veces el mismo programa con los mismos datos, sus instrucciones se ejecutarán en el mismo orden. A esto se le conoce como orden total.

Sin embargo, los programas concurrentes tiene un orden parcial. Si un programa tiene varios procesos concurrentes, el orden en el que se intercala la ejecución de dichos procesos NO puede ser establecido de antemano, ya que depende de la planificación del procesador y de a qué proceso se le conceda en cada momento. Dentro de cada proceso si sabemos el orden de ejecución, pero NO sabemos como se intercalará respecto a otros procesos concurrentes.

Si no diseñamos nuestros programas concurrentes con cuidado este hecho puede hacer que posean un comportamiento indeterminista (data race), es decir, que puedan arrojar resultados distintos ante distintas ejecuciones del programa con los mismos datos de entrada.

Son las conocidas como condiciones de carrera (race conditions), que ocurren cuando el hecho de que un programa funcione correctamente depende de la secuencia o timing en el que el procesador ejecuta sus hilos. En el siguiente apartado vemos un ejemplo de este comportamiento.