MSVC错误的线程安全

Jur*_*aho 11 c thread-safety visual-c++

errno在MSVC上是否是线程安全的?

根据这个问题的答案,POSIX要求errno是线程安全的.但MSVC可能不符合POSIX,MSDN也没有说明线程安全.MSDN矛盾提及errno被宣称为extern int errno;,但也作为#define errno (*_errno())

Dav*_*nan 14

尽管MSVC绝对不符合POSIX,但errno它是以线程安全的方式在MSVC运行时(至少从MSVC2008开始)实现的.

虽然文档声明它extern int errno实际上是作为一个#define允许强加线程安全的函数实现的.如果在反汇编窗口中单步执行此功能,则很明显使用了线程本地存储.

可悲的是,我不能指出任何证实这一点的官方文件,但这就是生活!