2013-01-03 7 views
5

Ich entwickelte einen einfachen Wrapper, der ein JSONObject mit Boost Property-Bäumen einkapselt. Das Problem ist ein Segmentierungsfehler in diesem Code:Parallelitätsprobleme mit Boost Eigenschaftsbaum

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

Ein bisschen Kontext, ich bin mit JSON für die Nachrichten Serialisierung. Wenn das Programm nur einen Thread verwendet, funktioniert es ohne Probleme. Wenn das Programm jedoch zwei Threads in verwendet, ergibt sich ein Segmentierungsfehler in der letzten Zeile des obigen Codes.

Jeder Thread hat sein eigenes JSONObject-Objekt und keine der Variablen wird zwischen den Threads geteilt. Meine Idee ist, dass der Stream möglicherweise intern nicht Thread-sicher ist.

Kann mir jemand helfen?

+0

Sind Sie sicher, dass pt nicht zwischen Threads geteilt wird? Haben Sie versucht, über die Funktion minimale Aufrufe zu tätigen und nur wenige Threads als Workers zu verwenden? AFAIK istringstream und read_json sind Thread-sicher, so ist es möglich, dass Sie Fehler an anderer Stelle Ihres Codes haben ... –

+0

Ja, ich bin mir sicher. – mariolpantunes

+1

Darf ich vorschlagen, http://sscce.org/ zu posten? Es würde dir helfen, einfacher zu sein. – Yakk

Antwort

8

Ich habe das Problem gefunden. Für boost Eigenschaftsbaum Thread-sicher zu sein, ist es notwendig, dieses Flag hinzuzufügen:

#define BOOST_SPIRIT_THREADSAFE 

dieses Flag den Code laufen ohne Probleme Nach der Zugabe.

Danke für die Hilfe.