条件变量(condition variable)是一种同步机制,它允许线程在某些条件不满足时挂起(等待),直到被另一个线程通知条件已经满足。在工作队列(work queue)的场景中,条件变量可以用来同步生产者和消费者的行为,确保生产者在队列为空时添加任务,而消费者在队列非空时取走任务。
条件变量的基本概念
条件变量是一种同步机制,用于线程间的协调。它允许一个或多个线程等待某个条件变为真,同时也允许其他线程在条件变为真时通知等待的线程。条件变量通常与互斥锁(mutex)一起使用,以确保在检查条件和等待条件时数据的一致性和线程的安全性。
简单示例
以下是使用条件变量的一个简单示例,假设我们有一个生产者-消费者模式的工作队列:
#include <iostream>
#include <mutex>
#include <condition_variable>
#include <queue>
#include <thread>// 定义全局变量
std::mutex mtx; // 互斥锁,用于保护数据的完整性
std::condition_variable cond; // 条件变量,用于线程间的信号通知
std::queue<int> workQueue; // 工作队列// 生产者函数
void producer() {
for (int i = 0; i < 10; ++i) {
std::unique_lock<std::mutex> lo