gpt4 book ai didi

c++ - boost 条件问题?

转载 作者:行者123 更新时间:2023-11-30 02:06:07 24 4
gpt4 key购买 nike

我对 boost 条件有疑问,我在一个 cpp 类中有这两个实例变量:

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();

这两个方法在不同的线程中调用。问题是当调用 method2 时,wait_answer_condition 在调用“wait_answer_condition.notify_one()”之前被释放,并且 method1 在没有找到结果的情况下被唤醒。

有人对此有想法吗?

最佳答案

条件变量可能会虚假地唤醒,并且通常不会存储唤醒事件(即,在任何人等待之前发出的唤醒就像在没有人听到的树林中拍手一样丢失)。因此,条件变量几乎总是在循环中使用:

bool is_answered = false;

// method1
boost::lock_guard<boost::mutex> lock( wait_answer_mutex );
while ( ! is_answered )
wait_answer_condition.wait(lock);

// method2
boost::lock_guard<boost::mutex> lock( wait_answer_mutex );
is_answered = true;
wait_answer_condition.notify_one();

关于c++ - boost 条件问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9033551/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com