2013-01-03 9 views
5

Boost Property ağaçlarıyla bir JSONObject ürününü kapsülleyen basit bir sarıcı geliştirdim.Eşzamanlılık sorunları wih Boost Özellik ağacı

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

Biraz bağlam, ben mesajı seri hale JSON kullanıyorum: sorunu bu kodda bir segmentasyon hatam. Program sadece bir iş parçacığı kullanıyorsa, sorunsuz çalışır. Ancak programda iki iplik kullanılıyorsa yukarıdaki kodun son satırında bölümleme hatası verir.

Her iş parçacığının kendi JSONObject nesnesi vardır ve değişkenlerden hiçbiri iş parçacıkları arasında paylaşılmaz. Benim fikrim, belki de akımın iç dişli güvenli değil.

Bana yardım eden var mı?

+0

pt'nin threadlar arasında paylaşılmadığından emin misiniz? Fonksiyonun üstünde minimum uygulama çağrısı yapmayı ve işçiler olarak birkaç iş parçacığı kullanmayı denediniz mi? AFAIK istringstream ve read_json iş parçacığı güvenlidir, bu nedenle kodunuzun başka bir yerinde hata yapabilmeniz mümkün ... –

+0

Evet, eminim. – mariolpantunes

+1

http://sscce.org/ adresini göndermeyi önerebilir miyim? Daha kolay yardımcı olur. – Yakk

cevap

8

Sorunu buldum. herhangi bir sorun olmadan bu bayrak kodu çalıştırmak ekledikten sonra

#define BOOST_SPIRIT_THREADSAFE 

: boost özelliği ağaç parçacığı güvenli olması için bayrak eklemek için gereklidir. Yardım için

teşekkürler.