我知道如何将字符串转换为int,float...从来都不是一个新问题。在阅读了一些文章之后,有人建议我使用strtol、strtol、strtod,所以我仔细研究了这些函数。
虽然strtol在其手册页中声称线程安全,但它会修改errno,那么它真的是线程安全吗?
如果不是,那么在C++ (而不是C++11)中完成这类转换作业并保持线程安全的正确方法是什么?
发布于 2014-03-07 18:27:39
从errno man page
ISO标准将
errno定义为可修改的int类型的左值,并且不能显式声明;errno可以是宏。errno是线程本地;在一个线程中设置它不会影响它在任何其他线程中的值。
设置errno的函数将只为单个线程设置它,因此它是线程安全的。
发布于 2014-03-07 18:28:16
是的,因为errno本身不是一个普通的全局变量:errno是线程安全的。
这是在Is errno thread-safe?中回答的。
https://stackoverflow.com/questions/22247478
复制相似问题