2013-01-03 8 views
5

Boostプロパティツリーを使用してJSONObjectをカプセル化する単純なラッパーを開発しました。 問題は、このコードでセグメンテーションフォールトです:Boostプロパティツリーによる並行性の問題

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

コンテキストのビット、私は、メッセージのシリアル化のためのJSONを使用しています。プログラムが1つのスレッドしか使用しない場合、問題なく動作します。しかし、プログラムが2つのスレッドを使用している場合、上記のコードの最後の行にセグメンテーションフォルトが与えられます。

各スレッドには独自のJSONObjectオブジェクトがあり、スレッド間で変数は共有されません。私の考えは、ストリームは内部的にスレッドセーフではないかもしれないということです。

誰でも手伝ってもらえますか?

+0

スレッド間でptが共有されていませんか?あなたは、上記の機能を呼び出す最小限のアプリケーションを作ってみましたか? AFAIK istringstreamとread_jsonはスレッドセーフなので、コードの他の場所にバグがある可能性があります。 –

+0

はい、確信しています。 – mariolpantunes

+1

http://sscce.org/を投稿することをおすすめしますか?それはあなたをより簡単に支援します。 – Yakk

答えて

8

問題が見つかりました。

#define BOOST_SPIRIT_THREADSAFE 

何の問題もなく、コードの実行をこのフラグを追加した後:このフラグを追加する必要があるスレッドセーフであるとブーストプロパティツリーの場合 。

ありがとうございました。

関連する問題