Non sono riuscito a trovare alcun riferimento a questo nelle documentazioni ...È l'assegnazione variabile e la lettura dell'operazione atomica?
Assegna a un doppio (o qualsiasi altro tipo semplice, incluso booleano) un'operazione atomica vista dal punto di vista dei thread?
double value = 0;
public void First() {
while(true) {
value = (new Random()).NextDouble();
}
}
public void Second() {
while(true) {
Console.WriteLine(value);
}
}
In questo esempio di codice, il primo metodo viene chiamato in un thread e il secondo in un altro. Il secondo metodo può ottenere un valore incasinato se ottiene l'esecuzione durante l'assegnazione alla variabile in un altro thread?
Non mi interessa se si riceve il vecchio valore, è solo importante ricevere un valore valido (non uno dove sono impostati 2 byte su 8). So che è una domanda stupida, ma voglio essere sicuro, perché non so come CLR in realtà imposta le variabili.
Questa non è una domanda stupida. –
@EricLippert Oggetto a = 10; anche questa è un'operazione atomica? Ho letto MSDN, i tuoi articoli ecc. Ma non riesco a trovare una risposta. in quanto comporta 2 passaggi. boxe e quindi assegnazione – Ehsan
@NoOne: la mutazione della variabile 'a' è atomica perché' object' è un tipo di riferimento. Il pugilato non entra in esso. –