Total Store Order (TSO) es un modelo de consistencia de memoria relajado que se sitúa entre la consistencia secuencial y modelos más débiles. En TSO, las escrituras (stores) realizadas por un procesador son observadas por todos los demás procesadores en el mismo orden en que fueron emitidas por el procesador original. Sin embargo, las lecturas (loads) pueden reordenarse con respecto a las escrituras posteriores en el mismo procesador. Esto significa que un procesador puede ver sus propias escrituras antes de que sean visibles para otros procesadores, y las lecturas pueden adelantarse a escrituras pendientes, mejorando el rendimiento al permitir que el procesador no espere a que una escritura se complete antes de continuar con una lectura.
TSO es el modelo de consistencia de memoria adoptado por la arquitectura de procesadores SPARC de Oracle y, de manera similar, por la arquitectura x86 de Intel y AMD, aunque con matices y extensiones (a menudo referido como 'Processor Order' o 'x86 Memory Model'). En estos sistemas, los procesadores utilizan buffers de escritura (store buffers) para almacenar las escrituras pendientes antes de que se hagan visibles para la memoria principal y otros procesadores. Las instrucciones de barrera de memoria (memory barriers o fences) como `SFENCE`, `LFENCE` y `MFENCE` en x86, o `MEMBAR` en SPARC, son utilizadas por los programadores para imponer un orden más estricto cuando es necesario, garantizando que ciertas operaciones de memoria se completen antes de que otras comiencen.
Para un arquitecto de sistemas, entender TSO es crucial para diseñar sistemas concurrentes y distribuidos de alto rendimiento. Permite comprender los trade-offs entre la consistencia estricta y el rendimiento. Al saber que las escrituras son ordenadas globalmente pero las lecturas pueden reordenarse localmente, se pueden optimizar algoritmos y estructuras de datos concurrentes, como locks, semáforos y colas sin bloqueo (lock-free queues), utilizando barreras de memoria explícitamente solo cuando la consistencia secuencial es estrictamente necesaria. Ignorar el modelo de memoria subyacente puede llevar a bugs sutiles y difíciles de depurar en entornos multiprocesador, donde el orden de las operaciones de memoria no es el esperado por el programador sin las garantías adecuadas.