Dans l'exemple de code
void foo()
{
static Bar b;
...
}
compilé avec GCC est-il garanti qu' b
sera créé et initialisé dans un "thread-safe"?
Dans la page de man de gcc, a trouvé l' -fno-thread-safe-statique option de ligne de commande:
N'émettent pas le code supplémentaire pour utiliser le routines spécifié dans l'ABI C++ pour "thread-safe" initialisation de locaux la statique. Vous pouvez utiliser cette option pour réduire la taille du code légèrement dans le code que n'a pas besoin d'être thread-safe.
Signifie-t-il, que les locaux de la statique sont thread-safe par défaut avec GCC ? Donc pas de raison de mettre explicite de gardiennage, par exemple, avec
pthread_mutex_lock/unlock
?Comment écrire du code portable - comment faire pour vérifier si le compilateur va ajouter ses gardes ? Ou est-il préférable de désactiver cette fonction de GCC ?