难以理解条件变量等待

时间:2016-03-15 23:43:03

标签: c++ multithreading

我很难理解条件变量语句

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

来自link

lambda函数在这里起什么作用。

以上语句是否表示“当unique_lock lk持有的互斥锁是空闲且i == 1”时停止阻止

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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