c++ - boost::lexical_cast 线程安全吗?

标签 c++ boost thread-safety atof lexical-cast

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

相关文章:

c++调用虚函数的问题

c++ - 检查类型是否来自给定的父类型

c++ - 将 QString 与 wchar_t 一起使用时未解析的外部符号

c++ - Boost Asio SSL 握手永远不会返回

c++ - 如何在 Mac 中将纹理 .jpg 图像用于 openGL 背景窗口?

c++ - 在g++ <7.4.0>上boost::archive::text_iarchive in_archive {is} boost <1.71>崩溃

c++ - 使用 boost 反序列化二进制数据时 static_assert 失败 "typex::value"失败

c# - 在 C# 中使用变量等待和线程安全

c++ - Qt:复制隐式共享类的实例是线程安全的吗?

c# - 为什么我没有看到 IDisposable 实现并发的任何实现?