Tôi không thể tìm thấy bất kỳ đâu trên trang MSDN nơi thảo luận này. Tuy nhiên, nhiều hàm trả về các bộ đệm tĩnh đã là chủ đề an toàn trong MSVC (nghĩa là chúng trả về các con trỏ tới các bộ đệm cục bộ luồng). Vì vậy, nó sẽ là đáng ngạc nhiên nếu errno không phải là chủ đề an toàn.
Các MSVC tiêu đề tập tin đều có định nghĩa này:
#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 */
Và một chương trình thử nghiệm nhỏ showd rằng 2 đề thiết errno đã ít nhất là không ảnh hưởng đến eachother. Vì vậy, tôi muốn nói rằng nó an toàn để giả định errno là thread an toàn (mặc dù có thể không nếu bạn liên kết đến một chuỗi CRT)
Bạn đang sử dụng phiên bản Visual C++ nào? –
@Steve: Hiện nay chủ yếu là MSVC 2010. –