La conception Singleton de Meyers est-elle thread-safe ?
L'implémentation présentée du modèle Singleton de Meyers, utilisant une initialisation paresseuse, soulève la question de sécurité du fil. Voici une analyse des raisons pour lesquelles ce code est thread-safe en C 11 et comment il assure la sécurité des threads.
Thread Safety en C 11
Selon la norme C 11 , §6.7 [stmt.dcl] p4 :
If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.
Cela implique qu'en C 11, le l’implémentation ci-dessus devient thread-safe. La norme exige que l'exécution du thread attende la fin de l'initialisation avant d'accéder à la variable, garantissant ainsi la sécurité des threads.
Prise en charge des compilateurs
Les compilateurs suivants prennent en charge l'initialisation dynamique. et Destruction with Concurrency, qui active cette fonctionnalité :
Remarque pour C 03
En C 03, le code n'était pas thread-safe. Meyers, dans son article "C and the Perils of Double-Checked Locking", suggère qu'en C 03, le verrouillage complet autour de la méthode d'instanciation est le moyen le plus simple de garantir la sécurité des threads sur toutes les plates-formes.
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!