2009-08-24 19 views
7

No durante la instanciación, pero una vez que se realiza la instanciación del objeto singleton, ¿qué pasará si dos o más hilos intentan acceder al mismo objeto singleton? Especialmente en el caso donde el objeto singleton toma mucho tiempo para procesar la solicitud (digamos 1 min) ... En este caso, si por ejemplo, 5 hilos intentan acceder al mismo objeto singleton, ¿cuál será el resultado?¿Qué sucede si más de un hilo intenta acceder al objeto singleton

Pregunta adicional: normalmente, ¿cuándo deberíamos seguir el patrón singleton y cuándo deberíamos evitarlo?

+1

La respuesta a su pregunta tal como es, es "realmente depende". ¿Qué tipo de singleton? es decir, ¿qué hace y cómo lo hace? ¿Y en qué idioma? –

Respuesta

5

A menos que la sincronización (bloqueo) se esté realizando dentro del Singleton, la respuesta es esta: es para todos.

Aunque Singleton asegura que solo se utiliza una instancia de un objeto cuando se solicita, el patrón en sí no proporciona ninguna forma de seguridad de subprocesos. Esto queda en manos del implementador.

En el caso específico que citó (con un método de larga ejecución), sería fundamental sincronizar el acceso a cualquier método que utilice variables de clase o de objeto. De lo contrario, con toda probabilidad, conducirían a condiciones de carrera.

¡Buena suerte!

+0

Bueno, de manera más general, el singleton debe ser seguro para la tarea. El bloqueo es una posibilidad, pero también lo es la apatridia. –

0

Un singleton no es diferente de cualquier otro objeto que no sea solo una instancia. Lo que sucederá cuando intentes acceder dependerá en gran medida de lo que intenten los hilos de acceso (es decir, leer contra escritura) y qué tipo de datos está conteniendo tu singleton.

0

La respuesta a su pregunta tal como es, es "realmente depende". ¿Qué tipo de singleton? es decir, ¿qué hace y cómo lo hace? ¿Y en qué idioma?

La realidad es que el patrón de singleton) n solo dicta e impone que solo puede tener una instancia de un determinado objeto. En sí mismo, no dice nada sobre múltiples hilos que acceden a ese objeto.

Por lo tanto, si se codifica correctamente (con sincronización de subprocesos implementada correctamente) no hay ninguna razón por la que no se comporte correctamente, incluso si las solicitudes al objeto tardan mucho tiempo en procesarse.

2

La regla general que uso para Singletons es que no debería afectar el código de ejecución y no tener efectos secundarios. Esencialmente para mí, en mis proyectos esto se traduce en algún tipo de funcionalidad de registro, o búsqueda de valor estático (es decir, cargar algunos datos comunes de una base de datos una vez y almacenarlos como referencia para que no tengan que leerse cada vez que sea necesario) .

0

Luego necesita la implementación segura de subprocesos del patrón singleton.

Encuentra this artículo útil para el mismo que describe la mayor parte del escenario multi-threading del patrón singleton.

HTH!

+0

Tenga en cuenta que las respuestas de solo vínculo no se recomiendan, por lo que las respuestas deberían ser el punto final de una búsqueda de una solución (frente a otra escala de referencias, que tienden a quedarse obsoletas en el tiempo). Considere agregar una sinopsis independiente aquí, manteniendo el enlace como referencia. – kleopatra

Cuestiones relacionadas