2013-01-03 11 views
5

Ho sviluppato un semplice wrapper che incapsula un JSONObject con alberi Boost Property. Il problema è un errore di segmentazione in questo codice:Problemi di concorrenza con Boost Albero delle proprietà

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

Un po 'di contesto, sto usando JSON per il messaggio serializzazione. Se il programma usa solo un thread funziona senza problemi. Ma se il programma utilizza due thread in dà un errore di segmentazione nell'ultima riga del codice precedente.

Ogni thread ha il proprio oggetto JSONObject e nessuna delle variabili è condivisa tra i thread. La mia idea è che forse il flusso non è thread-safe internamente.

Qualcuno può aiutarmi?

+0

sei sicuro che pt non è condiviso tra thread? Hai provato a fare una chiamata minima sopra la funzione e usare pochi thread come lavoratori? AFAIK istringstream e read_json sono thread-safe quindi è possibile che tu abbia un bug in un altro punto del tuo codice ... –

+0

Sì, ne sono sicuro. – mariolpantunes

+1

Posso suggerire di pubblicare un http://sscce.org/? Ti aiuterebbe più facilmente. – Yakk

risposta

8

Ho trovato il problema. per l'albero di proprietà spinta per essere thread-safe è necessario aggiungere questo flag:

#define BOOST_SPIRIT_THREADSAFE 

Dopo aver aggiunto questo flag il codice corsa senza problemi.

Grazie per l'aiuto.

Problemi correlati