作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我实际上没能在 boost 文档中找到这个问题的答案。我对在多线程环境中使用 atof
有点偏执,所以一个建议是用 lexical_cast
替换调用。 lexical_cast
是线程安全的吗?
最佳答案
是的,boost::lexical_cast
不会以任何方式修改输入字符串,如果从多个线程对同一字符串运行,则会产生新的输出。
它创建一个 stringstream
,它本身不是线程安全的,即不能在没有同步的情况下在线程之间共享,但会在每个线程中使用不同的 stringstream
对象。
lexical_cast
的问题是我避免使用它的原因是它抛出的异常完全没有用(没有上下文的 bad_cast)。然而,这是一个单独的问题,而不是线程安全。
lexical_cast 的另一个问题(限制)是它只会使用 C 语言环境(经典)。所以如果你有自己的方面,也许是日期时间,你想在上面使用 lexical_cast,你可能会想修改经典语言环境作为一种解决方法,这就是它不再是线程安全的地方,除非它是一开始就做。
实际上,如果你正在解析一个文件,你最好使用 boost::spirit
如果它有一个特定的语法或 boost::serialize
或甚至是常规的istream。事实上,boost::lexical_cast
对于此目的来说效率非常低,因为它会为每个标记创建一个新流。
关于c++ - boost::lexical_cast 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29511560/
我是一名优秀的程序员,十分优秀!