2010-04-28 5 views
1

J'ai une classe singleton, et je vais la compiler en tant que bibliothèque statique (lib) ou dynamique (dll).Appels vers la bibliothèque singleton

Est-il garanti que les appels vers le même fichier dans une machine font toujours référence à une même instance unique dans les deux cas?

Édition: Que faire si un processus charge deux bibliothèques différentes et que différentes fonctions de ces bibliothèques veulent utiliser l'instance de la classe singleton. Maintenant, ils accèdent à la même instance, ai-je raison?

Merci,

+0

cela dépend de la façon dont vous implémentez votre singleton, si vous voulez un "système singleton" existant en dehors des limites de processus, vous devez verrouiller quelque chose au niveau du système d'exploitation, par exemple. (windows) utilisant un mutex nommé dans l'espace de noms de l'objet noyau. –

+0

Édité ma réponse, en réponse à votre modification. – Stephen

Répondre

5

Non, les processus différents ne partagera pas un singleton à partir d'une bibliothèque commune. Différents processus utilisent des espaces de mémoire différents, chacun instanciera donc son propre singleton.

Vous aurez besoin d'utiliser une sorte de mémoire partagée ou de communication interprocessus pour partager des données entre les processus.

Si un processus unique charge les bibliothèques A et B, et que ces deux bibliothèques utilisent un singleton de la bibliothèque C, elles utiliseront la même instance.

2

Vous n'appelez pas de fichiers. Vous chargez du code dans votre processus à partir du fichier, le code contient des instructions d'initialisation qui construisent votre singleton. Le singleton est donc unique dans votre processus, quel que soit l'autre code utilisé dans le processus. Le singleton est et non unique d'un processus à un autre, même s'ils utilisent la même bibliothèque partagée.