Implémentation Singleton de Meyers : sécurité des threads dans différentes normes C
L'implémentation par Meyers du modèle Singleton avec initialisation paresseuse pose des questions sur son thread sécurité. Cet article examine son comportement dans différentes normes C.
C 11 et versions ultérieures
Dans C 11 et les normes ultérieures, l'implémentation Singleton de Meyers est thread-safe. Selon la norme (§6.7 [stmt.dcl] p4), l'exécution simultanée de la déclaration doit attendre la fin de l'initialisation.
C 03
En C 03, L'implémentation Singleton de Meyers n'était pas thread-safe. L'article de Meyers sur le « Verrouillage à double vérification » met en évidence ce problème. Il suggère un verrouillage complet autour de la méthode d'instanciation comme approche simple pour garantir la sécurité des threads sur toutes les plates-formes. Les modèles de verrouillage revérifiés peuvent être sujets à des conditions de concurrence critique sur certaines architectures sans barrières de mémoire stratégiques.
Compilateurs pris en charge
Initialisation et destruction dynamiques avec concurrence (Magic Statics sur MSDN ) est la fonctionnalité sous-jacente qui garantit la sécurité des threads dans C 11. Les compilateurs suivants prennent en charge cela fonctionnalité :
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!