Maison >développement back-end >C++ >L'initialisation des variables statiques locales dans C 11 est-elle 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!