std::condition_variable配合std::unique_lock
时间: 2024-10-11 20:06:05 浏览: 33
`std::condition_variable`和`std::unique_lock`是C++11中提供的一种同步原语,它们通常一起用于实现条件变量,即当一个线程等待某个条件满足时进入睡眠状态,而其他线程通过改变条件可以唤醒它。
`std::condition_variable`负责维护一个“等待队列”,当线程调用`wait`或`wait_for`时,它会把自己放入这个队列,并进入睡眠状态。只有持有`std::unique_lock`的对象才能解锁并修改`condition_variable`的状态,从而唤醒等待的线程。
`std::unique_lock`则是一种独占锁,它既可以锁定也可以解锁某个互斥量(mutex)。当你需要等待某个条件时,你可以先锁定互斥量,然后创建一个`std::unique_lock`实例,并将其传递给`condition_variable`的`wait`方法。当条件满足时,释放互斥量(即调用`unlock`),这将唤醒等待的线程,然后继续执行。
示例代码片段:
```cpp
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
// 主线程设置条件
{
std::lock_guard<std::mutex> lck(mtx);
if (/* 条件满足 */) {
ready = true;
cv.notify_one(); // 唤醒等待者
}
}
// 等待线程
std::unique_lock<std::mutex> ulock(mtx);
cv.wait(ulock, [] { return ready; }); // 等待直到ready变为true
// 现在条件已满足,可以执行后续操作
```
阅读全文