操作系统生产者和消费者问题C语言代码
时间: 2023-11-06 13:06:00 浏览: 108
以下是一个简单的生产者和消费者问题的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE];
int count = 0; // 缓冲区中元素的数量
int in = 0; // 生产者将要插入元素的位置
int out = 0; // 消费者将要取出元素的位置
void *producer(void *arg)
{
int i;
for (i = 0; i < 20; i++) {
while (count == BUFFER_SIZE); // 如果缓冲区已满,等待
buffer[in] = i;
in = (in + 1) % BUFFER_SIZE;
count++;
printf("生产者生产了 %d\n", i);
}
return NULL;
}
void *consumer(void *arg)
{
int i, data;
for (i = 0; i < 20; i++) {
while (count == 0); // 如果缓冲区为空,等待
data = buffer[out];
out = (out + 1) % BUFFER_SIZE;
count--;
printf("消费者消费了 %d\n", data);
}
return NULL;
}
int main()
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, producer, NULL);
pthread_create(&tid2, NULL, consumer, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
```
生产者会不断地向缓冲区中插入元素,这里模拟了生产者生产20个元素。如果缓冲区已满,生产者会等待。消费者会从缓冲区中取出元素,这里也模拟了消费者消费20个元素。如果缓冲区为空,消费者会等待。在主函数中创建了两个线程,一个是生产者线程,一个是消费者线程,然后使用 pthread_join() 函数等待这两个线程结束。
阅读全文