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
Linda Hamiltonoriginal
2024-12-25 06:45:10812parcourir

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;
}

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!

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