C语言生产者与消费者-不同速率实现

来源:互联网 发布:触摸查询一体机软件 编辑:程序博客网 时间:2024/05/20 21:59


#include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <error.h>#include <semaphore.h>int num[5]={0};sem_t sem1,sem2;int position_producer=0;int position_customer=0;void print(){int i;for(i=0;i<5;i++){printf("%d\t",num[i]);}printf("\n");}void thread1(void){int n,i;while(1){sleep(1);sem_wait(&sem1);if(position_customer==5){position_customer=0;}num[position_customer]=1;printf("生产--->");print();position_customer++;sem_post(&sem2);}pthread_exit(NULL);}void thread2(void){int n,i;while(1){sleep(2);sem_wait(&sem2);if(position_producer==5){position_producer=0;}num[position_producer]=0;printf("消费--->");print();position_producer++;sem_post(&sem1);}pthread_exit(NULL);}int main(){pthread_t id1,id2;srand(time(NULL));int ret;sem_init(&sem1,0,5);//emptysem_init(&sem2,0,0);//fullret=pthread_create(&id1,NULL,(void *)thread1,NULL);if(ret!=0){perror("create pthread error");exit(1);}ret=pthread_create(&id2,NULL,(void *)thread2,NULL);if(ret!=0){perror("create pthread error");exit(1);}pthread_join(id1,NULL);pthread_join(id2,NULL);sem_destroy(&sem1);sem_destroy(&sem2);}