Nie mogę znaleźć nigdzie na stronie MSDN, gdzie jest to omawiane. Jednak wiele funkcji, które zwracają bufory statyczne, jest już bezpiecznych dla wątków w MSVC (to znaczy zwracają wskaźniki do wątków lokalnych buforów). Więc byłoby zaskakujące, gdyby errno nie było bezpieczne dla wątków.
MSVC nagłówek pliki mają tę definicję:
#ifndef _CRT_ERRNO_DEFINED
#define _CRT_ERRNO_DEFINED
_CRTIMP extern int * __cdecl _errno(void);
#define errno (*_errno())
errno_t __cdecl _set_errno(_In_ int _Value);
errno_t __cdecl _get_errno(_Out_ int * _Value);
#endif /* _CRT_ERRNO_DEFINED */
i mały program testowy showd że 2 wątki ustawienie errno nie przynajmniej nie wpływa siebie. Powiedziałbym, że można bezpiecznie założyć, że errno jest bezpieczne dla wątków (choć prawdopodobnie nie, jeśli łączysz się z jednym wątkiem CRT).
Którą wersję Visual C++ używasz? –
@Steve: Obecnie głównie MSVC 2010. –