35 votes

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

Si vous écrivez une application multithread 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, existe-t-il un autre moyen d'indiquer le type d'erreur qui s'est produite plutôt que simplement qu'une erreur s'est produite?

35voto

Greg Hewgill Points 356191

Si votre bibliothèque standard est compatible avec le multithread, alors elle a probablement un #define qui change errno en un appel de fonction qui renvoie une valeur de retour d'erreur de thread local. Cependant, pour l'utiliser, vous devez généralement inclure <errno.h> , plutôt que de vous fier à une déclaration extern .

J'ai trouvé un article sur la sécurité des threads et POSIX.1 qui répond à cette même question.

18voto

qrdl Points 17813

man errno dit:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X