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

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

Susan Sarandon
Libérer: 2024-12-29 11:22:11
original
492 Les gens l'ont consulté

Is C  11's Static Local Variable Initialization Thread-Safe?

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

Question :

En C 11, le constructeur d'une variable locale statique comme celle de l'exemple ci-dessous s'exécute-t-il exactement une fois, même en mode multithread ? scénarios ?

Logger& g_logger() {
    static Logger lg;
    return lg;
}
Copier après la connexion

Réponse :

Selon la norme C 11 de la section 6.7, une variable locale statique est initialisée lors du premier contrôle temporel qui passe par sa déclaration. Cette initialisation doit être terminée avant qu'une exécution simultanée puisse se poursuivre. De plus, il est interdit à l'implémentation de provoquer un blocage lors de cette initialisation.

Implémentations du compilateur :

Versions actuelles des compilateurs populaires, notamment gcc 4.7, vc 2011 et clang 3.0, implémentez correctement ce comportement thread-safe. Par conséquent, vous pouvez être assuré que la variable statique locale sera initialisée une et une seule fois, garantissant un fonctionnement correct dans les scénarios multithread.

Remarques supplémentaires :

C'est Il est important de noter que même si l'initialisation de la variable locale statique est thread-safe, l'accès ultérieur à la variable via une référence telle que lg peut ne pas être thread-safe à moins que des mesures de synchronisation supplémentaires ne soient mis en œuvre.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal