2009-11-21 9 views
6

Si dos hilos intentan escribir en la misma dirección al mismo tiempo, ¿se garantiza que el valor después de la escritura simultánea es uno de los valores que los hilos intentaron escribir? o es posible obtener una combinación de los bits?escritura simultánea a la misma dirección de memoria

Además, ¿es posible que otro hilo lea la dirección de memoria mientras los bits están en un estado inestable?

Supongo que la pregunta se reduce a si una lectura o escritura en una sola dirección de memoria es atómica en el nivel de hardware.

+0

solo por aclaración, es para un solo entero – Mark

Respuesta

0

Una cosa es segura, para un tipo de datos de tamaño igual a registros de la CPU nunca puede tener bits en estado inestable, será uno de los dos valores

5

Creo que todo esto depende del "modelo de memoria" para su lenguaje de programación o sistema en particular.

+0

Mucho más, dependiendo de la sofisticación de las distintas partes involucradas (idioma, hardware, sistema operativo, modelo de hilo, etc.), entonces cualquiera de los escenarios es posible. – workmad3

+0

C++ en cualquier plataforma de hardware – Mark

2

Estas preguntas son fundamentales de un modelo de sistema y/o memoria de lenguaje de programación. Por lo tanto, elija su propio sistema operativo y un lenguaje de programación, lea las especificaciones y verá.

0

En una computadora multiprocesador, es posible que no haya un solo "valor" que se lea. Los dos hilos, y el tercero, pueden ver valores inconsistentes. Necesitaría una barrera de memoria para asegurar que cada hilo vea el mismo valor en esta dirección.

Aparte de eso, las escrituras son generalmente atómicas, por lo que sería uno o el otro de los valores que se han escrito (o hubo en primer lugar) que se leen. No estás hablando de un procesador Alpha, ¿verdad?

1

En algunos casos, los resultados pueden ser tan impredecible cuando el dos hilos están escribiendo en diferentes direcciones de memoria, en particular, piense en las estructuras de bitfield C, así como en las optimizaciones del compilador cuando escriba en direcciones adyacentes.

Si le apetece leer, el documento de Boehm "Threads cannot be implemented as a library" cubre esta y otras peculiaridades de la simultaneidad.

Cuestiones relacionadas