Est-il un moyen de mettre en œuvre un singleton objet en C++, qui est:
- Paresseusement construit dans un thread de manière sûre (deux threads peut simultanément être le premier utilisateur de singleton - il devrait être construit à la fois).
- Ne pas compter sur les variables statiques sont en cours de construction à l'avance (donc l'objet singleton est même sûr à utiliser lors de la construction des variables statiques).
(Je ne sais pas mon C++ assez bien, mais est-ce le cas que l'intégrale et constante statique des variables sont initialisées avant tout code qui est exécuté (c'est à dire, avant même de constructeurs statiques sont exécutés leurs valeurs peuvent déjà être "initialisé" dans le programme de l'image)? Si donc - peut-être cela peut être exploité pour mettre en œuvre un singleton mutex qui peut à son tour être utilisé pour la garde de la création de la véritable singleton..)
Excellent, il semble que j'ai un couple de bonnes réponses maintenant (la honte je ne peux pas marquer 2 ou 3 comme étant la réponse). Il semble y avoir deux grandes solutions:
- Utilisation statique d'initialisation (par opposition à la dynamique de l'initialisation) d'une GOUSSE variable statique, et de mettre mon propre mutex avec l'aide de la builtin atomique instructions. C'est le type de solution que j'ai été en faisant allusion à ma question, et je crois que je savais déjà.
- Utiliser une autre fonction de la bibliothèque comme pthread_once ou boost::call_once. Ces certes, je ne connaissais pas - et je suis très reconnaissant pour les réponses postées.