¿Es bueno probar una condición y luego bloquear luego volver a probar la condición [duplicar]

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

Pregunta

posible duplicado:
Bloqueo de doble comprobación en .NET

Editar: Muchas ediciones para aclarar esta pregunta no se trata de Singleton

Me encuentro escribiendo un código como este:

    if(resourceOnDiskNeedsUpdating)
    {
        lock(lockObject)
        {
            if(resourceOnDiskNeedsUpdating) // has a previous thread already done this?
                UpdateResourceOnDisk();
        }
    }
    return LoadResourceFromDisk();

UpdateResource() es una operación lenta. ¿Este patrón tiene sentido? ¿Hay mejores alternativas?

¿Fue útil?

Solución

This called "double-checked locking".

You need a memory fence to make it correct.

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

Otros consejos

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top