Ross W Ross W - 1 year ago 228
JSON Question

is boost::property_tree::ptree thread safe?

I'm using boosts read_json in a couple of threads in a piece of code. A simplified breakdown of the call is below. I'm getting segfaults in one of the threads (and sometimes the other) and it's making me think that read_json is not thread safe (Or I'm just using it in a dumb way)

void someclass::dojson() {
using boost::property_tree::ptree;
ptree pt;
std::stringstream ss(json_data_string);


Now json_data_string is different between the two classes (it's just json data received over a socket).

So is read_json thread safe or do I have to mutex it (rather not) or is there a better way of calling read_json that is thread safe?

Wei Wei
Answer Source

Because boost json parser depends on boost::spirit, and spirit is not thread-safety default.

You can add this macro before any ptree header file to resolve it.

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download