我有升壓條件的問題,我有一個CPP類內這兩個實例變量:助推條件問題?
boost::condition wait_answer_condition;
boost::mutex wait_answer_mutex;
然後我有發送信息,並用於狀況的方法:
方法1
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();
兩個方法被稱爲在不同的線程。問題是,當調用method2時,在調用「wait_answer_condition.notify_one()」之前釋放wait_answer_condition,並且method1被喚醒而未找到結果。
任何人都有這個想法?
根據http://www.boost.org/doc/libs/1_48_0/doc/html/thread/synchronization.html#thread.synchronization。 condvar_ref我認爲這種行爲的目的是 - 你忘了鎖定線程 – tuergeist 2012-01-27 13:10:02
也與我鎖的山姆結果。這種情況的反應是等待狀態的虛假行爲。見thiton答案。 – Macdeveloper 2012-01-28 08:10:14