我正在以下位置浏览条件变量文章
Here we have following code as example
#include "tbb/compat/condition_variable"
using namespace std;
condition_variable my_condition;
tbb::mutex my_mtx;
bool present = false;
void producer() {
unique_lock<tbb::mutex> ul( my_mtx );
present = true;
my_condition.notify_one();
}
void consumer() {
while( !present ) {
unique_lock<tbb::mutex> ul( my_mtx );
my_condition.wait( ul );
}
}
我的理解是我们使用条件变量来等待事件。我有以下问题
- 为什么我们在使用条件变量时在这里使用互斥锁?
- 在while循环中的消费者()函数中,我们正在使用互斥锁并在条件下等待,如果消费者已经使用了互斥锁,生产者函数如何锁定它,它如何通知它不是死锁?
- unique_lock 与 scoped_lock 有何不同?
感谢您帮助澄清我的问题。