#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);//empty
sem_init(&sem2,0,0);//full
ret=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);
}