基于C++编写代码,要求实现生产者-消费者问题,一个生产者、一个消费者共享n个缓冲区
时间: 2024-05-04 18:20:14 浏览: 122
下面是一个基于C++的生产者-消费者问题的实现,其中一个生产者和一个消费者将共享n个缓冲区。
```c++
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <queue>
using namespace std;
// 缓冲区大小
#define BUFFER_SIZE 10
// 全局变量
queue<int> buffer; // 缓冲区
mutex mtx; // 互斥锁
condition_variable cv; // 条件变量
int count = 0; // 生产者生产的产品数量
// 生产者线程
void producer() {
while (true) {
unique_lock<mutex> lock(mtx);
// 缓冲区已满,等待消费者消费产品
while (buffer.size() == BUFFER_SIZE) {
cv.wait(lock);
}
// 生产产品
int product = ++count;
buffer.push(product);
cout << "Producer produces " << product << endl;
// 通知消费者有产品可供消费
cv.notify_all();
}
}
// 消费者线程
void consumer() {
while (true) {
unique_lock<mutex> lock(mtx);
// 缓冲区为空,等待生产者生产产品
while (buffer.empty()) {
cv.wait(lock);
}
// 消费产品
int product = buffer.front();
buffer.pop();
cout << "Consumer consumes " << product << endl;
// 通知生产者有空间可供生产
cv.notify_all();
}
}
int main() {
// 创建生产者和消费者线程
thread t1(producer);
thread t2(consumer);
// 等待线程结束
t1.join();
t2.join();
return 0;
}
```
在该实现中,使用了一个队列来作为缓冲区,生产者将生产的产品放入队列中,消费者从队列中取出产品进行消费。当队列已满时,生产者将等待消费者消费产品,当队列为空时,消费者将等待生产者生产产品。使用互斥锁和条件变量来保证生产者和消费者之间的同步和互斥。
阅读全文