#include
#define BUFFER_SIZE 30 //充当水缸容量,水缸中可以装30桶水
#define BOTTER_NUM 5 //可利用的水桶数量为5
int small_heshang()//小和尚挑水进程,并创建3个子进程充当小和尚挑水
{
pid_t pid_A, pid_B, pid_C;
pid_A=fork();
pid_B=fork();
pid_C=fork();
if(pid_A==-1){
exit(1);//异常退出
}
else if(pid_A==0)//子进程A
{
printf("目前有%d桶水",full);
sem_wait(&avail);
sem_wait(&buffer);
printf("取水成功");
sem_wait(&mutex);
printf("倒水成功");
sem_post(&full);
sem_post(&buffer);
sem_post(&mutex);
}
else{
printf("执行小和尚挑水的副进程");
}
if(pid_B==-1){
exit(1);//异常退出
}
else if(pid_B==0)
{
printf("目前有%d桶水",full);
sem_wait(&avail);
sem_wait(&buffer);
printf("取水成功");
sem_wait(&mutex);
printf("倒水成功");
sem_post(&full);
sem_post(&buffer);
sem_post(&mutex);
}
else{ printf("执行小和尚挑水的副进程");
}
if(pid_C==-1){
exit(1);
}
else if(pid_C==0)
{
printf("目前有%d桶水",full);
sem_wait(&avail);
sem_wait(&buffer);
printf("取水成功");
sem_wait(&mutex);
printf("倒水成功");
sem_post(&full);
sem_post(&buffer);
sem_post(&mutex);
}
else{
printf("执行老和尚喝水副进程");
}
return 0;
}
int old_heshang()
{
pid_t pid_C,pid_D,pid_E;
pid_C=fork();
pid_D=fork();
pid_E=fork();
if(pid_C==-1){
exit(1);
}
else if(pid_C==0)
{
sem_wait(&avail);
sem_wait(&buffer);
sem_wait(&mutex);
sem_post(&full);
sem_post(&buffer);
sem_post(&mutex);
}
else
{
printf("执行老和尚喝水副进程");
}
if(pid_D==-1){
exit(1);//异常退出
}else if(pid_D==0){
sem_wait(&avail);
sem_wait(&buffer);
sem_wait(&mutex);
sem_post(&full);
sem_post(&buffer);
sem_post(&mutex);}
else{ printf("执行老和尚喝水副进程");
}if(pid_E==-1){
exit(1);//异常退出
}else if(pid_E==0){
sem_wait(&avail);
sem_wait(&buffer);
sem_wait(&mutex);
sem_post(&full);
sem_post(&buffer);
sem_post(&mutex);}
else{ printf("执行老和尚喝水副进程");
}return 0;}
/main.c/
sem_t mutex,full,avail;
sem_init(mutex,1,1);//初始化互斥信号量
sem_init(avail,1,BUFFER_SIZE-10);//初始化信号量,水缸中还可以装20桶水
sem_init(full,1, BUFFER_SIZE-20);//初始化信号量,水缸中已经装了10桶水
sem_init(buffer,1, BOTTER_NUM); //初始化信号量,可利用的水桶
int main(){
while(1){
small_heshang();
old_heshang();}
return 0;
}
代码运行出现
expected ‘)’ before numeric constant
sem_init(mutex,1,1);//初始化互斥信号量
是什么意思?有没有人能解答一下(„ಡωಡ„)栓Q
你看报错是第几行第几列呀?报错意思是你缺一个 )