Con respecto a la ordenación que describo a continuación, tengo algunas preguntas relacionadas.Garantías sobre la ordenación de memoria y la práctica de programación adecuada
Dadas estas garantías de pedido, no necesito vallas explícitas en muchos lugares. Sin embargo, ¿cómo puedo expresar la "valla" al compilador, en particular a GCC? Es decir, la garantía de orden de programa solo se aplica siempre que el optimizador no reordene mi programa.
¿Hay nuevos chips comunes/populares en uso que tengan núcleos de propósito general que no ofrecen tales garantías?
Estoy un poco confundido en C++ 0x con su idea de intercalar. ¿Debo utilizar la clase "atómica" para hacer uso de estas garantías, o hay algún otro aspecto en el borrador que también proporcione una forma de hacer uso de estas garantías?
Memoria pedidos
Tanto Intel como AMD, al menos con x86_64, garantía de que las cargas de memoria son secuenciales con respecto a las operaciones de la tienda hecho en un solo procesador. Es decir, si un procesador ejecuta estas tiendas:
- de tiendas El <-1
- tienda B <-2
- tienda C < - 3
En el momento en algún otro procesador ve C (3) se garantiza que también vea las tiendas anteriores A (1) y B (2). Ahora, la visibilidad entre los procesadores puede estar intercalada, pero la orden de la tienda de cualquier procesador dado también será secuencial.
También tienen garantías transitivos cuando el procesador 0 lee un valor almacenado por el procesador 1, a continuación, escribe un valor, que Procesador 2 leer el nuevo valor también debe ver que el valor de procesador 1.
Ignorar los casos especiales tratar con IO y dispositivos especiales. Solo me interesan las garantías generales de memoria: mi pedido aquí es el que más me interesa, ya que tiene la mayor importancia para los algoritmos concurrentes.
Esta es una excelente descripción de la situación. –