源代码
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<time.h>
#include<unistd.h>
#include<pthread.h>
#include<semaphore.h>
#define N 6
int speed_producer=1,speed_consumer=4;
int in,out,count;
int buffer[N];
sem_t empty,full,mutex;
void init()
{
sem_init(&mutex,0,1);
sem_init(&empty,0,N);
sem_init(&full,0,0);
in=0;
out=0;
count=0;
}
void *producerThread()
{
While(1){
sem_wait(&empty);
sem_wait(&mutex);
buffer[in]=0+rand()%6;
count++;
in=(in+1)%N;
if(in!=0)
printf(“生产者生产产品,此时缓冲区产品的个数为%d\n产品存放在缓冲池第%d个位置\n”,count,in);
else
printf(“生产者生产产品,此时缓冲区产品的个数为%d\n产品存放在缓冲池第6个位置\n”,count)
sem_post(&mutex);
sem_post(&full);
sleep(speed_producer);
}
}
Void *consumerThread()
{
while(1){
sem_wait(&full);
sem_wait(&muex);
count--;
out=(out+1)%N;
if(out!=0)
printf(“消费者消费产品,此时缓冲区产品的个数为%d\n产品消费在缓冲池第%d个位置\n”,count,out);
else
printf(“消费者消费产品,此时缓冲区产品的个数为%d\n产品消费在缓冲池第6个位置\n”,count);
sem_post(&mutex);
sem_post(&empty);
sleep(speed_consumer);
}
}
int main()
{
pthread_t producer,consumer;
init();
pthread_create(&producer,NULL,producerThread,NULL);
pthread_create(&consumer,NULL,consumerThread,NULL);
pthread_join(producer,NULL);
pthread_join(consumer,NULL);
sem_destroy(&mutex);
sem_destroy(&empty);
sem_destroy(&full);
exit(0);
}
运行结果