¿Qué pasa si la secuencia de instrucciones puede no seguir el mismo orden?
- Ejecución secuencial: da resultados idénticos y es independiente de la velocidad.
- Ejecución concurrente: actividades superpuestas en el tiempo que requieren sincronización.
Sea una sentencia con un conjunto de lectura de las variables leídas y un conjunto de escritura de las variables mutadas. Dos sentencias y pueden ejecutarse concurrentemente de manera idempotente (que se ejecuten siempre en el mismo orden) sí y solo sí se cumple . Esta condición de concurrencia establece como necesaria la restricción de escritura exclusiva.
Grafos de Precedencia
Este tipo de grafo es un grafo sin ciclos donde cada nodo representa una única sentencia o conjunto secuencial de instrucciones agrupadas.
Fork/Join
Un fork divide el flujo de control en dos Hilos. Luego, un join permite unir varios threads en uno solo.
Coben/Coend
Todas las instrucciones ubicadas entre cobegin y coend se ejecutan concurrentemente. Esto es más fácil de usar que un fork/join, pero hay grafos que este enfoque sencillo no puede resolver.
Parbegin/Parend
Similar a cobegin/coend pero para paralelismo.