¿En qué circunstancias no es seguro tener dos hilos diferentes escribiendo simultáneamente en elementos adyacentes de la misma matriz en x86? Entiendo que en algunas arquitecturas similares a DS9K con modelos de memoria demenciales esto puede causar desgarro de palabras, pero en x86 se pueden direccionar bytes individuales. Por ejemplo, en el lenguaje de programación D real
es un tipo de coma flotante de 80 bits en x86. ¿Sería seguro para hacer algo como:Desgarro de palabras en x86
real[] nums = new real[4]; // Assume new returns a 16-byte aligned block.
foreach(i; 0..4) {
// Create a new thread and have it do stuff and
// write results to index i of nums.
}
Nota: Sé que, incluso si esto es seguro, que a veces puede causar problemas de falsas compartir con la memoria caché, lo que lleva a un rendimiento lento. Sin embargo, para los casos de uso que tengo en mente, las escrituras serán lo suficientemente infrecuentes como para que esto no importe en la práctica.
Editar: No se preocupe por leer los valores que se escriben. La suposición es que allí será sincronización antes de que se lean los valores. Solo me importa la seguridad de escribiendo de esta manera.
Supongo que está buscando escritos sucios de las direcciones adyacentes? – BCS