Я разработал простую оболочку, которая инкапсулирует JSONObject с деревьями свойств Boost.
Проблема заключается в ошибке сегментации в этом коде:
void JSONObject::parse(const std::string &text)
{
std::istringstream ss(text);
boost::property_tree::read_json(ss, *pt);
}
Немного контекста, я использую JSON для сериализации сообщений. Если программа использует только один поток, она работает без проблем. Но если программа использует два потока, выдает ошибку сегментации в последней строке приведенного выше кода.
Каждый поток имеет свой собственный объект JSONObject, и ни одна из переменных не разделяется между потоками. Моя идея заключается в том, что, возможно, поток внутренне не является потокобезопасным.
Может кто-нибудь мне помочь?
Я нашел проблему.
Чтобы дерево свойств boost было поточно-ориентированным, необходимо добавить этот флаг:
#define BOOST_SPIRIT_THREADSAFE
После добавления этого флага код запускается без проблем.
Спасибо за помощь.
Других решений пока нет …