【发布时间】:2012-02-20 10:58:38
【问题描述】:
我的 boost 条件有问题,我在一个 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在调用“wait_answer_condition.notify_one()”之前被释放,method1被唤醒而没有找到结果。
有人知道吗?
【问题讨论】:
-
根据boost.org/doc/libs/1_48_0/doc/html/thread/…,我认为这种行为是有意的——你忘了锁定线程
-
也有了锁,我得到了同样的结果。原因是等待条件的虚假行为。请参阅 thiton 答案。
标签: c++ multithreading boost conditional-statements