我实际上未能在 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/