void * consumer() //消费者 { printf("消费者线程\n"); while(1) { sleep(1); ; //full的P操作 ; //mutex的P操作 printf("消费者取出:%s\n\n",buffer); //从缓冲区中取出产品 memset(buffer,0,BUF_SIZE_MAX); //清空缓冲区 ; //mutex的V操作 ; //empty的V操作 } } int main() { buffer=(char *)malloc(BUF_SIZE_MAX); //给缓冲区分配内存空间 pthread_t id_producer;//用于缓存生产者线程的pid pthread_t id_consumer;//用于消费者线程的pid ; //设置empty的初值为10 ; //设置full的初值为0 sem_init(&mutex,0,1); //设置mutex的初值为1 pthread_create(&id_producer,NULL,producer,NULL); //创建生产者线程 pthread_create(&id_consumer,NULL,consumer,NULL); //创建消费者线程 pthread_join(id_producer,NULL); //等待生产者线程结束 pthread_join(id_consumer,NULL); //等待消费者线程结束 sem_destroy(&empty); //删除empty信号量,释放资源 ; //删除full信号量,释放资源 ; //删除mutex信号量,释放资源 free(buffer);//释放缓冲区 }补全代码
时间: 2023-11-28 21:49:21 浏览: 39
下面是补全后的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <string.h>
#define BUF_SIZE_MAX 100 //缓冲区大小
char *buffer; //缓冲区
sem_t empty; //empty信号量
sem_t full; //full信号量
sem_t mutex; //mutex信号量
void *producer() //生产者
{
printf("生产者线程\n");
char product[BUF_SIZE_MAX];
while(1)
{
sleep(2);
sprintf(product, "产品%d", rand()%100);
; //empty的P操作
; //mutex的P操作
strcpy(buffer, product); //将产品放入缓冲区
printf("生产者生产:%s\n", buffer);
; //mutex的V操作
; //full的V操作
}
}
void *consumer() //消费者
{
printf("消费者线程\n");
while(1)
{
sleep(1);
; //full的P操作
; //mutex的P操作
printf("消费者取出:%s\n\n",buffer); //从缓冲区中取出产品
memset(buffer,0,BUF_SIZE_MAX); //清空缓冲区
; //mutex的V操作
; //empty的V操作
}
}
int main()
{
buffer=(char *)malloc(BUF_SIZE_MAX); //给缓冲区分配内存空间
pthread_t id_producer;//用于缓存生产者线程的pid
pthread_t id_consumer;//用于消费者线程的pid
; //设置empty的初值为10
; //设置full的初值为0
sem_init(&mutex,0,1); //设置mutex的初值为1
pthread_create(&id_producer,NULL,producer,NULL); //创建生产者线程
pthread_create(&id_consumer,NULL,consumer,NULL); //创建消费者线程
pthread_join(id_producer,NULL); //等待生产者线程结束
pthread_join(id_consumer,NULL); //等待消费者线程结束
; //删除empty信号量,释放资源
; //删除full信号量,释放资源
; //删除mutex信号量,释放资源
free(buffer);//释放缓冲区
return 0;
}
```