2008-12-01 9 views
7

Tengo una página web ASP.NET ejecutándose en IIS que usa un ensamblado común que contiene una clase singleton. ¿Debo implementar un mecanismo de bloqueo en el singleton para que sea seguro para subprocesos? O, ¿alguna conexión con el servidor web usará la misma instancia del singleton?¿Las clases de singleton son seguras para subprocesos en IIS?

Espero que esté preguntando esto de forma coherente.

Respuesta

2

El patrón habitual para singletons .NET crea una sola instancia por dominio de aplicación. La situación habitual en asp.net es que tienes varios hilos que se ejecutan en el mismo dominio de la aplicación. Esto significa que muy bien podría tener múltiples hilos ejecutando código en su singleton al mismo tiempo.

Tienes que examinar el singleton y determinar (en el mejor de tus capacidades koffreflectorkoff) si es seguro para subprocesos o no. Si mantiene y modifica los recursos compartidos, o si encapsula algún tipo de estado que se almacena entre llamadas a métodos, tenga cuidado.

Es posible que desee envolver el singleton dentro de un segundo singleton que utiliza bloqueos antes de delegar sus llamadas a la que no tiene control. De esta forma, podría tener un control más preciso sobre el bloqueo en lugar de bloquear cada llamada al singleton con un solo bloqueo. También le daría la ventaja de centralizar la ubicación del código de enhebrado ...

2

Si es un singleton estático ... no, no es seguro para subprocesos. Se comparte en todos los hilos que están golpeando esa instancia de la aplicación (por lo que las múltiples solicitudes lo compartirán).

Sin embargo, para lo que la está usando podría no necesitar seguridad de hilos necesariamente.

0

En .NET es posible implementar un Thread-safe Singleton sin usar bloqueos.

+0

-1. Los métodos necesitarían tener bloqueos si así se requiere. Este enlace no entra en esos detalles (solo acerca de cómo crear la clase singleton en sí misma, no su funcionalidad). –

+0

+1. Este comentario no merece -1. De hecho, los métodos pueden necesitar bloqueos, pero esto es independiente de la implementación del propio patrón singleton IMO. – Ben

Cuestiones relacionadas