È buono per testare una condizione, quindi bloccare quindi ri-testare la condizione [duplicato]

StackOverflow https://stackoverflow.com/questions/5036518

Domanda

.

Possibile duplicato:
bloccaggio a doppio controllo in .NET

Modifica: 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?

È stato utile?

Soluzione

This called "double-checked locking".

You need a memory fence to make it correct.

See Wikipedia's article on double checked locking in .NET

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top