tttt

发布时间 2023-11-19 14:54:13作者: 雾霭雾海

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");
}