生产者消费者c++代码
时间: 2024-10-10 14:14:50 浏览: 55
生产者消费者模型是一种经典的并发编程模式,它涉及到两个线程角色:生产者负责生成数据并放入共享缓冲区,而消费者则从缓冲区取出数据进行处理。在C++中,可以使用互斥量(mutex)、条件变量(condition_variable)等同步原语来实现这个模型。下面是一个简单的基于`std::queue`的生产者消费者例子:
```cpp
#include <iostream>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
std::queue<int> queue;
std::mutex mtx; // 互斥量
std::condition_variable cond; // 条件变量
// 生产者函数
void producer(int n) {
for (int i = 0; i < n; ++i) {
std::unique_lock<std::mutex> lck(mtx);
while (queue.full()) { // 当队列满时等待
cond.wait(lck); // 等待条件满足
}
queue.push(i); // 生产元素并解锁
std::cout << "Produced: " << i << "\n";
lck.unlock(); // 解锁
cond.notify_one(); // 唤醒一个等待的消费者
}
}
// 消费者函数
void consumer() {
std::unique_lock<std::mutex> lck(mtx);
while (queue.empty()) { // 当队列空时等待
cond.wait(lck);
}
int data = queue.front(); // 获取队首元素
queue.pop(); // 移除元素
std::cout << "Consumed: " << data << "\n";
lck.unlock();
cond.notify_one(); // 唤醒一个等待的生产者
}
int main() {
const int num_productions = 5;
std::thread producer_thread(producer, num_productions);
std::thread consumer_thread(consumer);
producer_thread.join();
consumer_thread.join();
return 0;
}
```
阅读全文