Posteado por: eocampo | marzo 5, 2010

El Patrón Singleton y los métodos “Thread Safe” en .Net

Inglés

Recientemente tuve una revisión de código de un proyecto de uno de mis colegas en el trabajo y me encontré esta implementación:

public sealed class TheClass {
   private TheClass() {}
   private static _theClass value;
   private static object obj = new Object();
    public static Instance Value {
          get {
                 if (TheClass.value == null) {
                        lock (syncRoot) {
                               if (TheClass.value == null) {
                                      TheClass.value = new TheClass();
                               }
                        }
                 }
                 return TheClass.value;
          }
   }      
}

Sí, estamos hablando del clásico patron “Singleton”, pero no implementado de la forma más propia, o más importante, de la forma más segura. Esta implementación podría permitir que se instancie doble la clase en algún punto. En resumen yo recomendaría al menos modificar el campo _theClass marcandolo como “volatile”. En realidad esta no es la única manera y no necesariamente funciona en todas las plataformas, así que buscando en Internet para ver que más información nueva existía del tema me encontré algunas variantes interesantes así que para los que quieran disfrutar de una lectura de bajo nivel ahí les van las ligas:

volatile and MemoryBarriers
Double-checked locking in .net at Stackoverflow

Alois Kraus incluso muestra el código a nivel de ensamblado!
Lazy Vs Eager Init Singletons / Double-Check Lock Pattern

http://www.yoda.arachsys.com/csharp/singleton.html

Por último, no podía faltar, La implementación oficial del patrón publicado por Microsoft

Anuncios

Responses

  1. […] El Patrón Singleton y los métodos “Thread Safe” en .Net « Ernesto Ocampo Blog en… on March 5, 2010 at 2:06 […]


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

A %d blogueros les gusta esto: