私はブースト状態に問題がある、私はcppのクラス内のこれらの二つのインスタンス変数を持っている:ブースト状態の問題?
法1
:その後、boost::condition wait_answer_condition;
boost::mutex wait_answer_mutex;
私は条件にメッセージを送信するとと方法を持っていますその後、
boost::unique_lock<boost::mutex> lock(wait_answer_mutex)
//do some work and send message
//wait the result
wait_answer_condition.wait(lk);
//get the result
result = responseIdSyncMap[currentRequestID];
私は結果を受け取り、別の方法を持っていると送信者スレッドをウェイクアップ
方法2
int requestID = responseData->getInt32Value("response_id");
responseIdSyncMap.insert(make_pair(requestID, responseData));
wait_answer_condition.notify_one();
2つの方法は、別のスレッドで呼び出されます。問題は、method2が呼び出されたときにwait_answer_conditionが解放されてからwait_answer_condition.notify_one()が呼び出され、method1が呼び出されて結果が見つからないということです。
誰もがそれについて考えていますか?
http://www.boost.org/doc/libs/1_48_0/doc/html/thread/synchronization.html#thread.synchronizationに記載の方法。 condvar_ref私はこの動作が意図されていると思います - あなたはスレッドをロックアウトするのを忘れました – tuergeist
また、ロックで私はサムの結果を持っていました。それの再現は待ち状態の偽りの振る舞いです。 thitonの答えを参照してください。 – Macdeveloper