7

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

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

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

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

谁能帮我?

4

1 回答 1

9

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

#define BOOST_SPIRIT_THREADSAFE

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

谢谢您的帮助。

于 2013-01-09T11:10:49.033 回答