难以理解条件变量等待

Difficulty understanding condition variable wait

本文关键字:变量 等待 条件      更新时间:2023-10-16

我很难理解条件变量语句

cv.wait(lk, []{return i == 1;});

从此链接

Lambda 函数在这里扮演什么角色。

上面的语句是否意味着"当unique_lock lk 持有的互斥锁空闲且 i==1 时停止阻塞"

词用于检查等待条件是否应再次进入等待状态或停止阻塞线程,以便线程继续运行。当您使用 notify 唤醒等待条件时,它会使用谓词进行检查并决定下一步该做什么 - 再次睡眠或让线程继续工作。

您提供的链接上有一个自我解释的代码:

while (!pred()) {
    wait(lock);
}

在满足 lambda 函数定义的条件之前(即,直到它返回 true wait才会退出。

如果查看参数的类型定义,则第二个参数必须是谓词。lambda 函数在那里,以便它满足谓词类型。你不能只输入:"i == 1",因为它不是一个函数。由于编写者不想编写一个只会由此锁调用的全新函数,因此他/她编写了一个 lambda 函数来满足谓词类型。http://en.cppreference.com/w/cpp/concept/Predicate

是的,

该语句意味着阻塞线程,直到满足两个条件:锁是空闲的,i == 1。