If you are writing a multi-threaded application that uses system/library calls that make use of errno to indicate the error type, is there a safe way to use errno? If not, is there some other way to indicate the type of error that occurred rather than just that an error has occurred?
Yes, it is thread safe. On Linux, the global errno variable is thread-specific. POSIX requires that errno be threadsafe.
write() is certainly thread-safe. The problem is that a partial write() could require multiple calls in order to completely write the data, and while that is "thread-safe" it could result in interleaved data.
If your standard library is multithread aware, then it probably has a #define
that changes errno
into a function call that returns a thread-local error return value. However, to use this you generally must include <errno.h>
, rather than relying on an extern
declaration.
I found an article Thread-safety and POSIX.1 which addresses this very question.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With