生产者消费者问题c语言实现代码
时间: 2023-11-12 19:05:01 浏览: 74
生产者消费者问题的解决代码
3星 · 编辑精心推荐
以下是 C 语言实现的生产者消费者问题代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define BUFFER_SIZE 10
// 缓冲区
int buffer[BUFFER_SIZE];
// 生产者与消费者的下标
int producer_index = 0;
int consumer_index = 0;
// 互斥锁和条件变量
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
// 生产者线程
void *producer(void *arg) {
int i;
for (i = 0; i < 100; i++) {
// 加锁
pthread_mutex_lock(&mutex);
// 如果缓冲区已满,等待消费者消费
while ((producer_index + 1) % BUFFER_SIZE == consumer_index) {
pthread_cond_wait(&cond, &mutex);
}
// 生产一个随机数(如果要生产其它数据,修改此处即可)
buffer[producer_index] = rand();
// 更新生产者下标
producer_index = (producer_index + 1) % BUFFER_SIZE;
// 通知消费者
pthread_cond_signal(&cond);
// 解锁
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
// 消费者线程
void *consumer(void *arg) {
int i, value;
while (1) {
// 加锁
pthread_mutex_lock(&mutex);
// 如果缓冲区为空,等待生产者生产
while (producer_index == consumer_index) {
pthread_cond_wait(&cond, &mutex);
}
// 取出一个数据并打印(如果要消费其它数据,修改此处即可)
value = buffer[consumer_index];
printf("Consumer get value: %d\n", value);
// 更新消费者下标
consumer_index = (consumer_index + 1) % BUFFER_SIZE;
// 通知生产者
pthread_cond_signal(&cond);
// 解锁
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main() {
pthread_t tid_producer, tid_consumer;
// 创建生产者线程
pthread_create(&tid_producer, NULL, producer, NULL);
// 创建消费者线程
pthread_create(&tid_consumer, NULL, consumer, NULL);
// 等待线程结束
pthread_join(tid_producer, NULL);
pthread_join(tid_consumer, NULL);
return 0;
}
```
阅读全文