2013-01-03 18 views
5

Opracowałem proste opakowanie, które zawiera w sobie drzewa JSONObject z drzewem właściwości zwiększenia. Problemem jest segmentacja winy w tym kodzie:Problemy z współbieżnością z drzewem właściwości wzmocnienia Boost

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

Trochę kontekście Używam JSON dla wiadomości serializacji. Jeśli program używa tylko jednego wątku, działa bez problemów. Ale jeśli program używa dwóch wątków w daje błąd segmentacji w ostatnim wierszu powyższego kodu.

Każdy wątek ma własny obiekt JSONObject i żadna zmienna nie jest współużytkowana między wątkami. Mój pomysł jest taki, że może strumień nie jest wewnętrznie bezpieczny dla wątków.

Czy ktoś może mi pomóc?

+0

czy jesteś pewien, że pt nie jest dzielony między wątkami? Czy próbowałeś, aby minimalne wywoływanie aplikacji było powyżej i używanie kilku wątków jako pracowników? AFAIK istringstream i read_json są bezpieczne dla wątków, więc możliwe jest, że masz błąd w innym miejscu kodu ... –

+0

Tak, jestem pewien. – mariolpantunes

+1

Czy mogę zasugerować opublikowanie http://sscce.org/? Pomoże ci to łatwiej. – Yakk

Odpowiedz

8

Znalazłem problem. Na drzewo nieruchomość doładowania za bezpieczeństwo wątków należy dodać tę flagę:

#define BOOST_SPIRIT_THREADSAFE 

Po dodaniu tej flagi bieg kodu bez żadnych problemów.

Dzięki za pomoc.