C++ 标准库中的条件变量
在多线程编程中,线程需要等待某个条件满足后再执行。例如生产者生产数据后,消费者才能消费;队列不为空时,消费者才能从中取数据。如果仅用互斥锁实现,消费者线程只能不断轮询检查条件,这会造成 CPU 资源的浪费。
引入场景
单纯的轮询会导致 CPU 空转,降低程序运行效率,条件变量就是为解决这类问题而生的。
以下是一个简单的轮询反例,消费者不断检查队列是否有数据:
#include <iostream>
#include <thread>
#include <mutex>
#include <queue>
using namespace std;
queue<int> data_queue;
mutex mtx;
// 生产者
void producer() {
for (int i = 1; i <= 5; ++i) {
lock_guard<mutex> lock(mtx);
data_queue.push(i);
cout << "生产者生产数据:" << i << endl;
}
}
// 消费者(轮询方式)
void consumer() {
while (true) {
lock_guard<mutex> lock(mtx);
if (!data_queue.empty()) {
int data = data_queue.front();
data_queue.pop();
cout << "消费者消费数据:" << data << endl;
if (data == ) ;
}
}
}
{
;
;
t_producer.();
t_consumer.();
;
}


