唐伯虎 发表于 2021-8-7 14:34:36

c 生产者消费者V1

1. 生产者1个线程
2. 消费者1个线程
3. 通过pthread_mutex_t并发控制
4. 通过pthread_cond_t wait signal
5. signal放到unlock后面
6. sleep放到unlock后面
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

#define PRODUCER_SIZE 1
#define CONSUMER_SIZE 1

int products = 0;

pthread_mutex_t mutex;
pthread_cond_t cond;

void produce();
void consume();


int main() {
    pthread_t producer;
    pthread_t consumer;

    pthread_mutex_init(&mutex, NULL);
    pthread_cond_init(&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);
      products++;
      printf("produce:%d start wake consum\n", products);
      pthread_mutex_unlock(&mutex);
      pthread_cond_signal(&cond);
      sleep(1);
    }
}

void consume() {
    printf("start consum\n");
    while (1) {
      pthread_mutex_lock(&mutex);
      while (products <= 0) {
            printf("consum start wait cond\n");
            pthread_cond_wait(&cond, &mutex);
            printf("consum wake up\n");
      }
      if (products > 0) {
            printf("consum:%d\n", products);
            products --;
      }
      pthread_mutex_unlock(&mutex);
      sleep(3);
    }
}



文档来源:51CTO技术博客https://blog.51cto.com/u_2498536/3304100
页: [1]
查看完整版本: c 生产者消费者V1