想象一下,我们有一个条件变量 cv_ 与互斥量 mtx_
线程 t1 有一个与 mtx_ 关联的 unique_lock ul 现在它有 cv_,而其他线程是 cv_.wait(unique_lock(mtx_), &{}
如果 t1 没有显式调用 cv_.notify_all(),相反,它调用 mtx_.unlock()
这会隐式通知其他正在等待cv_的线程吗?
void worker() {
while (true) {
unique_lock<mutex> ul(mtx_);
cv_.wait(ul, [&]() {
some condition
});
ul.unlock(); //
doing somthing ...
ul.lock();
update shared resource
ul.unlock();
cv_.notify_all();
}
}
通过我的测试,似乎中间的 ul.unlock() 通知其他正在等待的线程。