评论

收藏

[C++] c 消费者生产者V2

编程语言 编程语言 发布于:2021-08-07 14:06 | 阅读数:431 | 评论:0

增加了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\n");
  while (1) {
    pthread_mutex_lock(&mutex);
    while (products >= 10) {
      printf("buff full, producer start wait\n");
      pthread_cond_wait(&full_cond, &mutex);
      printf("producer wakeup\n");
    }
    products++;
    printf("produce:%d start wake consum\n", products);
    pthread_mutex_unlock(&mutex);
    pthread_cond_signal(&empty_cond);
    sleep(1);
  }
}
void consume() {
  printf("start consum\n");
  while (1) {
    pthread_mutex_lock(&mutex);
    while (products <= buffsize) {
      printf("consum start wait cond\n");
      pthread_cond_wait(&empty_cond, &mutex);
      printf("consum wake up\n");
    }
    if (products > 0) {
      printf("consum:%d\n", products);
      products --;
    }
    pthread_cond_signal(&full_cond);
    pthread_mutex_unlock(&mutex);
    sleep(3);
  }
}


关注下面的标签,发现更多相似文章