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