操作系统生产者消费者c++
时间: 2023-11-03 17:03:24 浏览: 106
生产者-消费者问题是操作系统中经典的进程同步问题之一。在C语言中,可以使用多线程来实现生产者-消费者模型。下面是一个使用C语言多线程实现生产者-消费者模型的示例代码:
```c
#include <iostream>
#include <random>
#include <time.h>
#include <thread>
#include <Windows.h>
using namespace std;
class Buffer {
private:
int size;
int* buffer;
int in;
int out;
int count;
public:
Buffer(int bufferSize) {
size = bufferSize;
buffer = new int[size];
in = 0;
out = 0;
count = 0;
}
void insert(int item) {
while (count == size) {
// 缓冲区已满,等待消费者消费
Sleep(1000);
}
buffer[in] = item;
in = (in + 1) % size;
count++;
}
int remove() {
while (count == 0) {
// 缓冲区为空,等待生产者生产
Sleep(1000);
}
int item = buffer[out];
out = (out + 1) % size;
count--;
return item;
}
};
// 生产者线程
void producer(Buffer* buffer) {
static uniform_int_distribution<unsigned> u(1, 100);
static default_random_engine e(time(0));
for (int i = 0; i < 20; i++) {
int item = u(e);
buffer->insert(item);
Sleep(1000);
}
}
// 消费者线程
void consumer(Buffer* buffer) {
default_random_engine v(time(0));
for (int i = 0; i < 20; i++) {
buffer->remove();
Sleep(2000);
}
}
int main() {
Buffer buffer(10); // 缓冲区大小为10
thread producerThread(producer, &buffer);
thread consumerThread(consumer, &buffer);
producerThread.join();
consumerThread.join();
cout << "结束!" << endl;
return 0;}
```
此示例代码中,使用了C++11的线程库来创建生产者线程和消费者线程,并通过`Buffer`类模拟了一个有界缓冲区。生产者线程调用`insert`方法往缓冲区中插入数据,消费者线程调用`remove`方法从缓冲区中取出数据。为了保证同步,生产者线程和消费者线程在访问缓冲区时都使用了互斥锁。
阅读全文