我知道如何将字符串转换为int,float ...绝不是一个新问题。经过一些文章后,我被建议使用strtol,strtoll,strtod,所以我仔细研究了这些功能。
虽然strtol在其手册页中声称线程安全,但是它会修改errno,所以它真的是线程安全吗?
如果没有,那么用C ++(而不是C ++ 11)转换作业并保持线程安全的正确方法是什么?
答案 0 :(得分:4)
errno由ISO C标准定义为可修改的左值 输入int,不得显式声明; errno可能是一个宏。 errno是线程本地的;在一个线程中设置它不会影响它 任何其他线程中的值。
设置errno
的函数只会为单个线程设置它,因此它是线程安全的。
答案 1 :(得分:4)
是的,因为errno
本身不是普通的普通全局变量:errno
是线程安全的。
这在Is errno
thread-safe?中得到解答。