2013-01-03 29 views
5

मैंने एक साधारण रैपर विकसित किया जो बूस्ट प्रॉपर्टी पेड़ के साथ JSONObject को समाहित करता है।बूस्ट संपत्ति पेड़ के साथ समवर्ती समस्याएं

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

संदर्भ के बारे में थोड़ी, मैं संदेश क्रमबद्धता के लिए JSON उपयोग कर रहा हूँ: समस्या इस कोड में एक विभाजन गलती है। यदि कार्यक्रम केवल एक धागा का उपयोग करता है तो यह बिना किसी समस्या के काम करता है। लेकिन यदि कार्यक्रम दो धागे का उपयोग करता है तो उपर्युक्त कोड की अंतिम पंक्ति में सेगमेंटेशन गलती देता है।

प्रत्येक धागे का अपना JSONObject ऑब्जेक्ट होता है और धागे के बीच कोई भी चर साझा नहीं किया जाता है। मेरा विचार यह है कि शायद स्ट्रीम आंतरिक रूप से सुरक्षित नहीं है।

क्या कोई मेरी मदद कर सकता है?

+0

क्या आप वाकई थ्रेड के बीच साझा नहीं किया गया है? क्या आपने उपरोक्त फ़ंक्शन के ऊपर न्यूनतम एप्लिकेशन कॉल करने और श्रमिकों के रूप में कुछ धागे का उपयोग करने का प्रयास किया है? AFAIK istringstream और read_json थ्रेड सुरक्षित हैं इसलिए यह संभव है कि आपके कोड के अन्य स्थान पर बग है ... –

+0

हाँ, मुझे यकीन है। – mariolpantunes

+1

क्या मैं एक http://sscce.org/ पोस्ट करने का सुझाव दे सकता हूं? यह आपको आसान बनाने में मदद करेगा। – Yakk

उत्तर

8

मुझे समस्या मिली।

#define BOOST_SPIRIT_THREADSAFE 

बिना किसी समस्या के इस ध्वज कोड रन जोड़ने के बाद: बढ़ावा संपत्ति पेड़ सुरक्षित थ्रेड होने के लिए यह इस ध्वज को जोड़ने के लिए आवश्यक है।

सहायता के लिए धन्यवाद।