Existe-t-il un moyen d’utiliser errno en toute sécurité dans une application multithread?

Si vous écrivez une application multi-thread qui utilise des appels système / bibliothèque qui utilisent errno pour indiquer le type d’erreur, existe-t-il un moyen sûr d’utiliser errno? Sinon, y a-t-il un autre moyen d’indiquer le type d’erreur survenu plutôt qu’une simple erreur?

Si votre bibliothèque standard est multithread, alors elle a probablement une #define qui change errno en appel de fonction qui retourne une valeur de retour d’erreur au niveau du thread. Cependant, pour utiliser cela, vous devez généralement inclure , plutôt que de vous fier à une déclaration extern .

J’ai trouvé un article Thread-safety et POSIX.1 qui répond à cette question.

man errno dit:

errno est défini par la norme ISO C comme une valeur modifiable de type int et ne doit pas être explicitement déclaré; errno peut être une macro. errno est thread-local; le placer dans un thread n’affecte pas sa valeur dans aucun autre thread.