难以理解条件变量等待
Difficulty understanding condition variable wait
我很难理解条件变量语句
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。
相关文章:
- 子线程中的条件变量等待停止主线程中的执行
- 正在连接的等待条件变量的线程会发生什么情况?
- 如何"stop"正在等待条件变量的分离线程?
- 如何修复条件变量等待/通知的竞争条件
- 可以在同一条件变量上等待多个线程
- 一个线程如何制作东西而不是在条件变量上等待
- 等待条件变量后未并行运行的线程
- "cin >>变量"不等待输入
- 我将如何连续更新变量,并同时等待输入
- 等待条件变量是否会加载 CPU 内核
- 你真的能用WaitFor..等待条件变量吗..对象
- 等待中有条件变量的班级破坏
- 条件变量 - 等待/通知种族条件
- C++条件变量并等待
- 中断已处于条件变量等待调用中的提升线程
- 在发出等待条件变量的信号后,线程何时获取锁?是什么决定了它
- 等待从获取锁的函数调用的帮助程序函数中的条件变量
- 线程同步:等待两个bool变量
- 难以理解条件变量等待
- C++:条件变量等待