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

L'initialisation des variables statiques locales C 11 est-elle garantie pour être thread-safe ?

Linda Hamilton
Libérer: 2024-12-25 06:45:10
original
806 Les gens l'ont consulté

Is C  11 Local Static Variable Initialization Guaranteed to be Thread-Safe?

Initialisation garantie des variables statiques locales Thread-Safe en C 11

Une question fréquemment débattue en C est la sécurité des threads de l'initialisation des variables statiques locales, comme dans le code suivant :

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

Norme C 11 et sécurité des fils

Dans le C 11, le comportement de ces initialisations a été finalisé et il est désormais garanti qu'elles sont thread-safe. La section 6.7 de la norme précise qu '"une telle variable est initialisée la première fois que le contrôle passe par sa déclaration" et que "l'exécution simultanée doit attendre la fin de l'initialisation". De plus, une note de bas de page d'implémentation précise que "L'implémentation ne doit pas introduire de blocage autour de l'exécution de l'initialiseur."

Implémentation du compilateur

Les principaux compilateurs (gcc 4.7, vc 2011 et clang 3.0) ont correctement implémenté les exigences révisées en matière de sécurité des threads. Cela signifie que le constructeur de la variable lg ne sera exécuté qu'une seule fois, même en présence de threads simultanés.

Notez que cette garantie ne s'applique qu'à l'initialisation elle-même. L'accès ultérieur à la variable via la référence n'est pas nécessairement thread-safe.

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