C'è un modo per usare errno in modo sicuro in un'applicazione multi-thread? [duplicare]
Domanda
Questa domanda ha già una risposta qui:
- Errno thread-safe? 8 risposte
Se si sta scrivendo un'applicazione multi-thread che utilizza chiamate di sistema / libreria che utilizzano errno per indicare il tipo di errore, esiste un modo sicuro per usare errno? In caso contrario, esiste un altro modo per indicare il tipo di errore che si è verificato piuttosto che solo un errore?
Soluzione
Se la tua libreria standard è a conoscenza del multithread, probabilmente ha un #define
che cambia errno
in una chiamata di funzione che restituisce un valore di ritorno dell'errore locale del thread. Tuttavia, per usarlo in genere devi includere <errno.h>
, anziché fare affidamento su una extern
dichiarazione.
Ho trovato un articolo Thread-safety e POSIX.1 che affronta proprio questa domanda .
Altri suggerimenti
man errno
dice:
errno è definito dallo standard ISO C. essere un valore modificabile di tipo int e non deve essere esplicitamente dichiarato; errno può essere una macro. errno è thread-local; impostandolo in uno il thread non influisce sul suo valore in qualsiasi altro thread.