Maison >développement back-end >C++ >L'initialisation des variables statiques locales dans C 11 est-elle thread-safe ?

L'initialisation des variables statiques locales dans C 11 est-elle thread-safe ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-29 11:23:09929parcourir

Is Local Static Variable Initialization in C  11 Thread-Safe?

Initialisation des variables statiques locales C 11 : sécurité des threads

En ce qui concerne la sécurité des threads lors de l'initialisation des variables statiques locales en C 11, il y a eu de nombreuses discussions. Cet article vise à fournir une réponse complète basée sur la norme actuelle et l'état de mise en œuvre.

C 11 Sécurité des threads des variables statiques locales

Section 6.7 du C 11 La norme indique explicitement que l'initialisation d'une variable statique locale se produit la première fois que le contrôle passe par sa déclaration. De plus, l'initialisation est considérée comme terminée une fois terminée, et toute exécution simultanée saisissant la déclaration alors que l'initialisation est en cours doit attendre son achèvement.

Implémentation dans les compilateurs

Dans Conformément à la norme, les compilateurs populaires tels que GCC 4.7, Visual C 2011 et Clang 3.0 ont implémenté une initialisation thread-safe pour les variables statiques locales. Cela garantit que le constructeur d'une variable statique locale, telle que lg dans l'exemple fourni, ne s'exécutera qu'une seule fois, garantissant une initialisation thread-safe.

Considérations supplémentaires

Bien que l'initialisation soit thread-safe, il est important de noter que cela ne s'étend pas à l'accès ultérieur à la variable via une référence. Par conséquent, il est toujours nécessaire de garantir la sécurité des threads dans l'utilisation de la variable initialisée, car la norme ne spécifie aucune garantie spécifique pour un accès thread-safe au-delà de la phase d'initialisation.

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