Pergunta

Possível duplicata:
Bloqueio verificado duas vezes em .net

EDITAR: muitas edições para esclarecer esta questão não é sobre singleton

Eu me pego escrevendo um código como este:

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

UpdateResource() é uma operação lenta.Esse padrão faz sentido?
Existem alternativas melhores?

Foi útil?

Solução

Isso é chamado de "bloqueio verificado duas vezes".

Você precisa de uma barreira de memória para corrigi-lo.

Ver Artigo da Wikipedia sobre bloqueio verificado duas vezes no .NET

Outras dicas

Uma alternativa que uso seria apenas usar a palavra-chave 'volátil'.http://msdn.microsoft.com/en-us/library/x13ttww7%28v=vs.71%29.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top