La consistencia secuencial es un modelo de consistencia utilizado en el dominio de la computación concurrente (por ejemplo, en memoria compartida distribuida , transacciones distribuidas , etc.).
Es la propiedad de que "... el resultado de cualquier ejecución es el mismo que si las operaciones de todos los procesadores se ejecutaran en algún orden secuencial, y las operaciones de cada procesador individual aparecieran en esta secuencia en el orden especificado por su programa". [1]
Es decir, el orden de ejecución de un programa en el mismo procesador (o hilo) es el mismo que el orden de ejecución de los programas, mientras que el orden de ejecución de un programa en diferentes procesadores (o hilos) no está definido. En un ejemplo como este:
El orden de ejecución entre A1, B1 y C1 se conserva, es decir, A1 se ejecuta antes que B1 y B1 antes que C1. Lo mismo ocurre con A2 y B2. Pero, como el orden de ejecución entre procesadores no está definido, B2 podría ejecutarse antes o después de C1 (B2 podría ejecutarse físicamente antes que C1, pero el efecto de B2 podría verse después del de C1, lo que es lo mismo que "B2 se ejecuta después de C1").
En teoría, existe una única memoria global y un "interruptor" que conecta un procesador arbitrario a la memoria en cualquier paso de tiempo. Cada procesador emite operaciones de memoria en el orden del programa y el interruptor proporciona la serialización global entre todas las operaciones de memoria [2].
La coherencia secuencial es más débil que la coherencia estricta . Ambas requieren que una lectura desde una ubicación devuelva el valor de la última escritura en esa ubicación y que las operaciones se vean en el orden en el que realmente se emitieron. La coherencia estricta requiere además que diferentes subprocesos de ejecución se ejecuten al unísono, con un comportamiento y una temporización deterministas.
La mayoría de las arquitecturas de conjuntos de instrucciones , incluidas x86 , x86-64 , ARM y RISC-V , no presentan un modelo de memoria secuencialmente consistente a los programas. Algunas optimizaciones de hardware importantes, como el almacenamiento en caché de escritura diferida , están en desacuerdo con la consistencia secuencial. Esto significa que los programas multiproceso en sistemas multiprocesador en estas arquitecturas pueden exhibir un comportamiento que no es consistente con ningún entrelazado de las instrucciones en los subprocesos, típicamente al leer valores obsoletos.