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的主要内容,如果未能解决你的问题,请参考以下文章

请问如何用C语言实现“生产者与消费者问题”?(最好附上完整的C语言源代码)

C中具有共享队列的线程安全生产者/消费者

C/C++实现生产者消费者模式

C++11 简单的生产者消费者多线程

综合运用: C++11 多线程下生产者消费者模型详解(转)

C ++ 11中无锁的多生产者/消费者队列