7
votes

Que se passe-t-il si plus d'un fil tente d'accéder à un objet singleton

Pas lors de l'instanciation, mais une fois que l'instanciation de l'objet Singleton est terminée, que se passera-t-il si deux threads ou plus essaient d'accéder au même objet Singleton? Surtout dans le cas où l'objet Singleton prend beaucoup de temps pour traiter la demande (disons 1 min) ... Dans ce cas, si pour ex., 5 threads tentent d'accéder au même objet singleton, quel sera le résultat? < / p>

Question supplémentaire: Normalement, quand devrions-nous aller pour le modèle singleton et quand devrions-nous l'éviter?


1 commentaires

La réponse à votre question tel qu'il est, est "Cela dépend vraiment". Quel genre de singleton? C'est-à-dire qu'est-ce que ça fait et comment ça le fait? Et dans quelle langue?


5 Réponses :


0
votes

Un singleton n'est pas différent de tout autre objet autre que celui d'une seule instance. Que se passe-t-il lorsque vous essayez d'y accéder, cela dépendra en grande partie de ce que les threads d'accès tentent (c.-à-d. Lire vs écriture) et quel type de données tient votre singleton.


0 commentaires

5
votes

sauf si la synchronisation (verrouillage) n'est exécutée dans le singleton, la réponse est la suivante: c'est un free-pour-tous.

Bien que le singleton garantit qu'une seule instance d'un objet est utilisée à la demande, le motif lui-même ne fournit pas de manière intrinsèquement une forme de sécurité de fil. Ceci est laissé à la mise en œuvre.

Dans le cas spécifique, vous citerez (avec une méthode de course longue), il serait essentiel de synchroniser l'accès à n'importe quelle méthode utilisant des variables de niveau ou d'objet. Défaut de le faire, dans toute la probabilité, conduisait à des conditions de course.

bonne chance!


1 commentaires

Bien, plus généralement, le singleton doit être threadsafe. Le verrouillage est une possibilité, mais l'apatridie est donc l'apatridie.



0
votes

La réponse à votre question tel qu'il est, est "Cela dépend vraiment". Quel genre de singleton? C'est-à-dire qu'est-ce que ça fait et comment ça le fait? Et dans quelle langue?

La réalité est que le singleton patter) N ne dicte que et applique que vous ne pouvez avoir qu'une seule instance d'un certain objet. En particulier, cela ne dit rien sur plusieurs threads accédant à cet objet.

Donc, si codé droit (avec une synchronisation de fil de fil mises en œuvre correctement) il n'y a aucune raison pour laquelle il ne devrait pas se comporter correctement - même si les demandes à l'objet prennent très longtemps à traiter!


0 commentaires

2
votes

La règle générale que j'utilise pour les singletons est que cela ne devrait pas affecter le code d'exécution et ne pas avoir d'effets secondaires. Essentiellement pour moi, dans mes projets, cela se traduit par une sorte de fonctionnalité de journalisation ou de la recherche de valeur statique (c.-à-d. Chargement de données communes d'une base de données une fois et la stocker à titre de référence afin que cela ne soit pas à lire à chaque fois que c'est nécessaire) .


0 commentaires

0
votes

Ensuite, vous avez besoin d'une mise en oeuvre en toute sécurité du motif singleton.

Trouver Cet article utile pour la même chose qui décrit la plupart des multi-threading Scénario de modèle singleton.

hth!


1 commentaires

Notez que les réponses seulement des liaisons sont découragées, les réponses doivent donc être le point final d'une recherche d'une solution (contre une autre halte de références, qui tendent à être obsolète au fil du temps). Veuillez envisager d'ajouter un synopsis autonome ici, en gardant le lien comme référence.