class Unit {
private readonly string name;
private readonly double scale;
public Unit(string name, double scale) {
this.name = name;
this.scale = scale,
}
public string Name { get { return name; } }
public string Scale { get { return scale; } }
private static Unit gram = new Unit("Gram", 1.0);
public Unit Gram { get { return gram; } }
}
Più thread hanno accesso a Unit.Gram
. Perché è ok per più thread contemporaneamente leggere Unit.Gram.Title
?Perché gli oggetti immutabili sono thread-safe?
La mia preoccupazione è che si riferiscono alla stessa posizione di memoria. Un thread inizia a leggere quella memoria, quindi non è "bloccato" allora? .NET gestisce la sincronizzazione per questa sezione critica sottostante? O sbaglio nel pensare che la lettura simultanea abbia bisogno di sincronizzazione?
"La mia preoccupazione è che si riferiscono alla stessa posizione di memoria." Sono loro? Può essere. Non è la tua preoccupazione, è la preoccupazione della VM. La lettura simultanea non ha bisogno di sincronizzazione, perché dovrebbe? –
* "perché dovrebbe" * >> non è la domanda qui? Se leggo lo stesso libro che legge la mia ragazza, allo stesso tempo, finiamo sempre per litigare. So che non è un problema nei computer però (due thread che leggono allo stesso tempo non accade, l'architettura della CPU si occupa di questo), ma trovo una domanda molto legittima :) – Abel
Leggere un libro implica uno stato mutabile (pagina corrente, fulmine, ecc.). Non stai litigando per il libro, ma per l'elaborazione. – sisve