c# - tipos - ¿La asignación de variables y la lectura de la operación atómica?
tipos de variables numericas en c# (1)
No pude encontrar ninguna referencia a esto en la documentación ...
¿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, el primer método se llama en un subproceso y el segundo 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.
Para responder a tu pregunta, no. No se garantiza que las asignaciones a dobles sean atómicas. Los documentos están disponibles here . Básicamente, los tipos incorporados <= 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