并发问题与Boost属性树有关

mar*_*nes 6 c++ multithreading boost istream boost-propertytree

我开发了一个简单的包装器,它使用Boost属性树封装了一个JSONObject.问题是此代码中的分段错误:

void JSONObject::parse(const std::string &text)
{
    std::istringstream ss(text);
    boost::property_tree::read_json(ss, *pt);
}
Run Code Online (Sandbox Code Playgroud)

一点上下文,我使用JSON进行消息序列化.如果程序只使用一个线程,它可以正常工作.但是如果程序使用两个线程在上面的代码的最后一行中给出了一个分段错误.

每个线程都有自己的JSONObject对象,并且线程之间不共享任何变量.我的想法是,流内部可能不是线程安全的.

谁能帮我?

mar*_*nes 9

我发现了这个问题.要使boost属性树成为线程安全的,必须添加此标志:

#define BOOST_SPIRIT_THREADSAFE
Run Code Online (Sandbox Code Playgroud)

添加此标志后,代码运行没有任何问题.

谢谢您的帮助.