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; }
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."
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!