Oui, c'est thread-safe. Sur Linux, le global variable errno est de thread spécifique. POSIX exige que errno être thread-safe.
Voir http://www.unix.org/whitepapers/reentrant.html
Dans POSIX.1, errno est définie comme une
externe variable globale. Mais ce
la définition est inacceptable dans un
environnement multithread, parce que ses
utilisation peut entraîner la non-déterministes
résultats. Le problème est que deux ou
plusieurs threads peuvent rencontrer des erreurs, tous les
à l'origine du même errno à définir.
Dans ces circonstances, un thread
pourriez vérifier errno après il
a déjà été mis à jour par un autre
fil de discussion.
Pour contourner le résultant
non-déterminisme, POSIX.1c redéfinit
errno comme un service qui peut accéder à l'
par thread numéro d'erreur comme suit
(ISO/IEC 9945:1-1996, §2.4):
Certaines fonctions peuvent fournir le numéro de l'erreur dans une variable accessible
à travers le symbole de errno. Le symbole
errno est définie par y compris le
l'en-tête , comme spécifié par le
C Standard ... Pour chaque thread d'un
processus, la valeur de errno est pas
être affectée par des appels de fonctions ou de
les affectations à errno par d'autres threads.
Voir aussi http://linux.die.net/man/3/errno
errno est thread-local; le réglage dans un thread n'affecte pas sa valeur dans toute autre thread.