Проблемы параллелизма с использованием дерева свойств Boost

Я разработал простую оболочку, которая инкапсулирует JSONObject с деревьями свойств Boost.
Проблема заключается в ошибке сегментации в этом коде:

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

Немного контекста, я использую JSON для сериализации сообщений. Если программа использует только один поток, она работает без проблем. Но если программа использует два потока, выдает ошибку сегментации в последней строке приведенного выше кода.

Каждый поток имеет свой собственный объект JSONObject, и ни одна из переменных не разделяется между потоками. Моя идея заключается в том, что, возможно, поток внутренне не является потокобезопасным.

Может кто-нибудь мне помочь?

5

Решение

Я нашел проблему.
Чтобы дерево свойств boost было поточно-ориентированным, необходимо добавить этот флаг:

#define BOOST_SPIRIT_THREADSAFE

После добавления этого флага код запускается без проблем.

Спасибо за помощь.

8

Другие решения

Других решений пока нет …