include <semaphore.h>
include <stdio.h>
include <stdlib.h>
include <string.h>
include <pthread.h>
define MAX 256
char *buffer;
sem_ t empty;
//定义同步信号量empty
sem_ t full;//定义同步信号量fullsem_ t mutex; //定义互斥信号量mutex
void * producer() //生产者
{
sem_ wait(&empty); //empty 的P操作
sem_ wait(&mutex); //mutex 的P操作
printf("input something to buffer:");
buffer=(char *)malloc(MAX); //给 缓冲区分配内存空间fgets( buffer,MAX ,stdin); //輸 入产品至缓冲区
sem_ post(&mutex); //mutex 的V操作
sem_ post(&full);//full 的V操作
}
void *consumer() //消 费者
{
sem wait(&full);//full 的P操作
sem_ wait(&mutex); //mutex 的P操作
printf( "read product from buffer:%s" ,buffer); /从缓冲区中取出产品memset(buffer,0,MAX);
//清空缓冲区
sem post(&mutex); //mutex 的V操作
sem_ post(&empty); //empty 的V操作
}
int main()
{
pthread_ t id_ producer;pthread_ t id_ consumer; ,int ret;
sem_ init(&empty,0,10);
//设置empty到初值为10
sem_ init(&full,0,0);
//设置full到初值为0
sem_ init(&mutex,0,1);
//设置mutex到初值为1
ret=pthread create(&id_ producer,NULL,producer,NULD); //创建 生产者线程ret=pthread create( &id consumer,NULL,consumer,NULL); //创建 消费者线程pthread_ join(id_ producer,NULL); //等 待生产者线程结束
pthread_ join(id_ consumer,NULD); //等 待消费者线程结束
sem_ destroy( &empty);
//删除信号量
sem_ destroy( &full);
sem_ destroy( &mutex);
printf("The End...\n");
}