我开发了一个简单的包装器,它使用Boost属性树封装了一个JSONObject。 问题是此代码中的分段错误:
void JSONObject::parse(const std::string &text)
{
std::istringstream ss(text);
boost::property_tree::read_json(ss, *pt);
}
一些上下文,我使用JSON进行消息序列化。如果程序只使用一个线程,它可以正常工作。但是如果程序使用两个线程在上面代码的最后一行中给出了一个分段错误。
每个线程都有自己的JSONObject对象,并且线程之间不共享任何变量。我的想法是,流内部可能不是线程安全的。
任何人都可以帮助我吗?
答案 0 :(得分:9)
我发现了问题。 要使boost属性树成为线程安全的,必须添加此标志:
#define BOOST_SPIRIT_THREADSAFE
添加此标志后,代码运行没有任何问题。
感谢您的帮助。