写一个生产者消费者模型C代码
时间: 2024-05-04 10:21:26 浏览: 11
以下是一个基本的生产者消费者模型的 C 代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define BUFFER_SIZE 10
int buffer[BUFFER_SIZE];
int buffer_index;
pthread_mutex_t buffer_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t buffer_cond_consumer = PTHREAD_COND_INITIALIZER;
pthread_cond_t buffer_cond_producer = PTHREAD_COND_INITIALIZER;
void *producer(void *arg) {
for(int i = 0; i < 50; i++) {
pthread_mutex_lock(&buffer_mutex);
if(buffer_index == BUFFER_SIZE) {
pthread_cond_wait(&buffer_cond_producer, &buffer_mutex);
}
buffer[buffer_index++] = i;
printf("Producer produced %d\n", i);
pthread_cond_signal(&buffer_cond_consumer);
pthread_mutex_unlock(&buffer_mutex);
}
pthread_exit(0);
}
void *consumer(void *arg) {
while(1) {
pthread_mutex_lock(&buffer_mutex);
if(buffer_index == 0) {
pthread_cond_wait(&buffer_cond_consumer, &buffer_mutex);
}
printf("Consumer consumed %d\n", buffer[--buffer_index]);
pthread_cond_signal(&buffer_cond_producer);
pthread_mutex_unlock(&buffer_mutex);
}
pthread_exit(0);
}
int main(int argc, char **argv) {
buffer_index = 0;
pthread_t prod, cons;
pthread_create(&prod, NULL, producer, NULL);
pthread_create(&cons, NULL, consumer, NULL);
pthread_join(prod, NULL);
pthread_join(cons, NULL);
return 0;
}
```
这个例子中,我们使用了 Pthreads 库中的互斥量和条件变量。生产者线程会生成一些数字并将它们存储在缓冲区中。如果缓冲区已满,生产者会等待一个消费者信号来通知它可以继续生产。消费者线程会从缓冲区中取出数字并打印出来。如果缓冲区为空,消费者会等待一个生产者信号来通知它可以继续消费。