2010-04-29 9 views
35

No he podido encontrar ninguna referencia al respecto en la documentación ...¿La asignación de variables y la lectura de la operación atómica?

¿Está asignando a un doble (o cualquier otro tipo simple, incluido booleano) una operación atómica vista desde la perspectiva de los hilos?

double value = 0; 

public void First() { 
while(true) { 
    value = (new Random()).NextDouble(); 
} 
} 

public void Second() { 
while(true) { 
    Console.WriteLine(value); 
} 
} 

En este ejemplo de código, primero método es llamado en un hilo, y la segunda en otro. ¿Puede el segundo método obtener un valor desordenado si obtiene su ejecución durante la asignación a la variable en otro hilo?

No me importa si recibo el valor anterior, solo es importante recibir un valor válido (no uno en el que se establecen 2 de 8 bytes). Sé que es una pregunta estúpida, pero quiero estar seguro, porque no sé cómo CLR realmente establece las variables.

+27

Esta no es una pregunta estúpida. –

+0

@EricLippert Objeto a = 10; ¿Es esta una operación atómica también? He leído MSDN, sus artículos, etc. Pero parece que no puedo encontrar una respuesta. ya que implica 2 pasos. boxeo y asignación – Ehsan

+0

@NoOne: la mutación de la variable 'a' es atómica porque' object' es un tipo de referencia. El boxeo no entra en eso. –

Respuesta

24

Para responder a su pregunta, no. No se garantiza que las asignaciones a dobles sean atómicas. Los documentos están disponibles here. Básicamente, < = los tipos incorporados de 32 bits son atómicos,> = los tipos de 64 bits no lo son. Para operaciones atómicas en tipos de 64 bits, puede usar los métodos en System.Threading.Interlocked

Cuestiones relacionadas