std::mutex mtx_;
std::condition_variable cv_;
int n_;
在线程①中
std::unique_lock<std::mutex> lck(mtx_);
cv_.wait(lck);
n_ = ***;
在线程②中
std::lock_guard<std::mutex> guard(mtx_);
n_ = ###;
cv_.notify();
以上情况很容易发生,当线程②进行了notify之后,线程①又没有操作mtx_的权限而将线程①②卡住。
因此要进行notify时,一定要先将mutex的拥有权释放,然后再notify。
将线程②中代码修改为:
{
std::lock_guard<std::mutex> guard(mtx_);
n_ = ###;
}
cv_.notify();
本文探讨了在C++中使用std::mutex和std::condition_variable时常见的问题,重点在于如何避免线程间因权限问题导致的卡死。通过实例讲解了在notify操作前释放mutex的重要性,并提供了正确的代码修改建议。

2213

被折叠的 条评论
为什么被折叠?



