È buono per testare una condizione, quindi bloccare quindi ri-testare la condizione [duplicato]
-
15-11-2019 - |
Domanda
.Possibile duplicato:
bloccaggio a doppio controllo in .NETModifica: Un sacco di modifiche per chiarire questa domanda non riguarda Singleton
Mi ritrovo a scrivere codice come questo:
.if(resourceOnDiskNeedsUpdating) { lock(lockObject) { if(resourceOnDiskNeedsUpdating) // has a previous thread already done this? UpdateResourceOnDisk(); } } return LoadResourceFromDisk();
UpdateResource()
è un'operazione lenta. Questo modello ha senso?
Ci sono alternative migliori?
Soluzione
This called "double-checked locking".
You need a memory fence to make it correct.
Altri suggerimenti
An alternative I use would be to just use the 'volatile' keyword. http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx