Maison >développement back-end >C++ >L'implémentation Singleton de Meyers est-elle Thread-Safe en C 11 ?

L'implémentation Singleton de Meyers est-elle Thread-Safe en C 11 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-21 07:26:10452parcourir

Is Meyers' Singleton Implementation Thread-Safe in C  11?

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é :

  • Visual Studio : pris en charge depuis Visual Studio 2015
  • GCC : pris en charge depuis GCC 4.3

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn