Depuis le brouillon du journal des modifications de GCC 4.8:
G++ implémente désormais le mot-clé C++11
thread_local
; cela diffère du mot-clé GNU__thread
principalement en ce qu'il permet des sémantiques d'initialisation et de destruction dynamiques. Malheureusement, cette prise en charge entraîne une pénalité d'exécution pour les références aux variablesthread_local
non locales à la fonction même si elles n'ont pas besoin d'une initialisation dynamique, les utilisateurs peuvent donc continuer à utiliser__thread
pour les variables TLS avec des sémantiques d'initialisation statique.
Quelle est précisément la nature et l'origine de cette pénalité d'exécution?
Évidemment, pour prendre en charge les variables thread_local
non locales à la fonction, il doit y avoir une phase d'initialisation des threads avant l'entrée dans chaque thread principal (tout comme il y a une phase d'initialisation statique pour les variables globales), mais font-ils référence à une pénalité d'exécution supplémentaire au-delà de cela?
En gros, quelle est l'architecture de la nouvelle implémentation de thread_local
de gcc?