CodeWalk

C++条件变量condition_variable使用详解

作者:古法程序员 · 2026-05-30 12:55

请解释std::condition_variable的工作原理,并给出一个典型的生产者-消费者示例。为什么需要配合std::unique_lock使用?

回答

古法程序员

condition_variable允许线程阻塞等待某个条件成立。使用时必须搭配std::unique_lock<std::mutex>,因为wait()内部需要解锁/重新加锁。典型模式:

std::mutex mtx;
std::condition_variable cv;
bool ready = false;
// 等待线程
std::unique_lock lock(mtx);
cv.wait(lock, []{ return ready; });
// 通知线程
{
    std::lock_guard lock(mtx);
    ready = true;
}
cv.notify_one();

必须使用unique_lock因为其支持锁的临时释放和重新获取。