Constructor estático y clase Singleton

Tengo un caché de objetos que implementa el patrón de diseño de Singleton. Mi enfoque de singleton fue siempre cargar de forma perezosa la instancia estática cuando se accede por primera vez a la propiedad.

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

Sin embargo, sé que este enfoque no es seguro para subprocesos y la comprobación, por ejemplo, de ser nula introduce una pequeña ineficiencia. ¿Sería prudente implementar un constructor estático en la clase que ejemplifica la instancia estática?

Tal como lo entiendo, el constructor estático se llamará cuando se produzca el primer acceso a la propiedad estática. ¿Es esto válido? ¿Proporcionará algún beneficio sobre el enfoque actual de carga diferida o sería mejor explorar una implementación proxy o utilizar un bloqueo para forzar la seguridad de subprocesos?

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

No tengo mucha experiencia con constructores estáticos, así que no quiero saltar con esta idea si es una implementación igual o peor de la propiedad de carga diferida.

Saludos gary

Respuestas a la pregunta(2)

Su respuesta a la pregunta