Sécurité des threads de l'implémentation du modèle Singleton de Meyers
Cette implémentation du modèle Singleton de Meyers utilisant l'initialisation paresseuse soulève des questions sur la sécurité des threads.
Implémentation Singleton de Meyers
Le code fourni pour le modèle Singleton est la suivante :
static Singleton& instance() { static Singleton s; return s; }
Analyse de sécurité des threads
En C 11, cette implémentation est thread-safe en raison de la garantie du §6.7 [stmt .dcl] p4 :
"Si le contrôle entre la déclaration simultanément pendant que la variable est en cours d'initialisation, l'exécution simultanée attendra la fin de l'opération. initialisation."
Les compilateurs comme GCC (depuis la version 4.3) et Visual Studio (depuis 2015) prennent en charge cette fonctionnalité.
Implémentation C 03
Dans C 03, le code n’était pas thread-safe. L'article de Meyers « C et les périls du verrouillage à double vérification » traite de ces préoccupations. Un verrouillage complet autour de la méthode d'instanciation a été recommandé pour garantir la concurrence, tandis que les variantes de verrouillage revérifiées pourraient rencontrer des conditions de concurrence sur des architectures spécifiques sans barrières de mémoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!