c++实现生产消费者模型
时间: 2024-10-25 08:03:19 浏览: 4
C++实现生产与消费者模型
在C++中实现生产者消费者模型通常涉及到线程同步和条件变量。这个经典的问题描述了一个场景,其中有一个生产者线程负责生成产品放入缓冲区,而消费者线程则从缓冲区取出并消费产品。以下是使用`std::queue`和`std::mutex`、`std::condition_variable`的基本步骤:
1. **包含头文件**:
```cpp
#include <iostream>
#include <thread>
#include <queue>
#include <mutex>
#include <condition_variable>
```
2. **定义数据结构和共享资源**:
```cpp
std::queue<int> productQueue;
std::mutex queueMutex; // 保护队列访问
std::condition_variable notEmpty; // 当队列非空时唤醒消费者
std::condition_variable notFull; // 当队列不满时唤醒生产者
```
3. **生产者函数**:
```cpp
void producer(int count) {
for (int i = 0; i < count; ++i) {
std::unique_lock<std::mutex> lock(queueMutex);
while (productQueue.full()) { // 队列满时等待
notFull.wait(lock);
}
productQueue.push(i); // 生产产品
std::cout << "Produced: " << i << std::endl;
lock.unlock();
notEmpty.notify_one(); // 唤醒消费者
}
}
```
4. **消费者函数**:
```cpp
void consumer() {
std::unique_lock<std::mutex> lock(queueMutex);
while (productQueue.empty()) { // 队列空时等待
notEmpty.wait(lock);
}
int item = productQueue.front(); // 消费产品
productQueue.pop();
std::cout << "Consumed: " << item << std::endl;
lock.unlock();
notFull.notify_one(); // 唤醒生产者
}
```
5. **主程序启动线程**:
```cpp
int main() {
std::thread producerThread(producer, 10); // 生产10件商品
std::thread consumerThread(consumer); // 开启消费者线程
producerThread.join(); // 等待生产者完成
consumerThread.join(); // 等待消费者完成
return 0;
}
```
阅读全文