互斥解锁会隐式通知其他线程吗?

问题描述 投票:0回答:0

想象一下,我们有一个条件变量 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() 通知其他正在等待的线程。

c++ mutex condition-variable
© www.soinside.com 2019 - 2024. All rights reserved.