Construtor estático e classe Singleton

Eu tenho um cache de objetos que implementa o padrão de design do Singleton. Minha abordagem ao singleton sempre foi preguiçosa carregar a instância estática quando a propriedade é acessada pela primeira vez.

public static Widget
{
    get
    {
        if(instance==null) instance = new Widget();
        return instance;
    }
}

No entanto, eu sei que esta abordagem não é thread-safe e a verificação por exemplo ser nula apresenta uma pequena ineficiência. Seria sensato implementar um construtor estático na classe que instancia a instância estática?

Pelo que entendi, o construtor estático seria chamado sempre que ocorre o primeiro acesso à propriedade estática. Isso é válido e fornecerá benefícios sobre a abordagem de carregamento lento atual ou seria melhor explorar uma implementação de proxy ou usar um bloqueio para forçá-lo a ser thread-safe?

public static Widget
    {
        get
        {
            if(instance==null)
            {
                lock(padlock)
                {
                    if(instance==null) instance = new Widget();
                }
            }
            return instance;
        }
    }

Não tenho muita experiência com construtores estáticos, portanto, não quero entrar nessa idéia se for uma implementação igual ou pior da propriedade de carregamento lento.

Felicidades, Gary

questionAnswers(2)

yourAnswerToTheQuestion