strtol,strtoll,strtod真的线程安全吗?

时间:2014-03-07 10:25:45

标签: c++

我知道如何将字符串转换为int,float ...绝不是一个新问题。经过一些文章后,我被建议使用strtol,strtoll,strtod,所以我仔细研究了这些功能。

虽然strtol在其手册页中声称线程安全,但是它会修改errno,所以它真的是线程安全吗?

如果没有,那么用C ++(而不是C ++ 11)转换作业并保持线程安全的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

来自errno man page

  

errno由ISO C标准定义为可修改的左值   输入int,不得显式声明; errno可能是一个宏。    errno是线程本地的;在一个线程中设置它不会影响它   任何其他线程中的值。

设置errno的函数只会为单个线程设置它,因此它是线程安全的。

答案 1 :(得分:4)

是的,因为errno本身不是普通的普通全局变量:errno是线程安全的。

这在Is errno thread-safe?中得到解答。