c 消费者生产者V2
Posted luckygxf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c 消费者生产者V2相关的知识,希望对你有一定的参考价值。
增加了buffsize,生产者生产过多,wait
#include <stdio.h> #include <unistd.h> #include <pthread.h> #define PRODUCER_SIZE 1 #define CONSUMER_SIZE 1 int products = 0; int buffsize = 5; pthread_mutex_t mutex; pthread_cond_t empty_cond; pthread_cond_t full_cond; void produce(); void consume(); int main() { pthread_t producer; pthread_t consumer; pthread_mutex_init(&mutex, NULL); pthread_cond_init(&empty_cond, NULL); pthread_cond_init(&full_cond, NULL); pthread_create(&producer, NULL, produce, NULL); pthread_create(&consumer, NULL, consume, NULL); pthread_join(producer, NULL); pthread_join(consumer, NULL); return 0; } void produce(){ // sleep(2); printf("start produce "); while (1) { pthread_mutex_lock(&mutex); while (products >= 10) { printf("buff full, producer start wait "); pthread_cond_wait(&full_cond, &mutex); printf("producer wakeup "); } products++; printf("produce:%d start wake consum ", products); pthread_mutex_unlock(&mutex); pthread_cond_signal(&empty_cond); sleep(1); } } void consume() { printf("start consum "); while (1) { pthread_mutex_lock(&mutex); while (products <= buffsize) { printf("consum start wait cond "); pthread_cond_wait(&empty_cond, &mutex); printf("consum wake up "); } if (products > 0) { printf("consum:%d ", products); products --; } pthread_cond_signal(&full_cond); pthread_mutex_unlock(&mutex); sleep(3); } }
以上是关于c 消费者生产者V2的主要内容,如果未能解决你的问题,请参考以下文章