📄 control.c
字号:
#include "ipc.h"int count;int waitingroom;int chair;int flag;int number;int main(int argc,char *argv[]){ Msg_buf msg_arg; //建立一条请求消息队列,存放理发师的请求与新顾客的请求 quest_flg = IPC_CREAT| 0644; quest_key = 201; quest_id = set_msq(quest_key,quest_flg); //联系一个响应消息队列 respond_flg = IPC_CREAT|0644; respond_key = 202; respond_id = set_msq(respond_key,respond_flg); //建立理发椅子队列 My_flg1 = IPC_CREAT|0644; queen_key1 = 203; queen_id1= set_msq(queen_key1,My_flg1); //建立沙发队列 My_flg2 = IPC_CREAT|0644; queen_key2 = 204; queen_id2= set_msq(queen_key2,My_flg2); //建立大厅队列 My_flg3 = IPC_CREAT|0644; queen_key3 = 205; queen_id3= set_msq(queen_key3,My_flg3); //控制进程准备接收和响应读写者的消息 printf("Wait quest \n"); quest_flg = IPC_NOWAIT; //以非阻塞方式接收请求消息 count=0; waitingroom=0; chair=0; flag=1; while(1) { if(flag) { if(msgrcv(quest_id,&msg_arg,sizeof(msg_arg),RECIEVEMONEY,quest_flg) >= 0)//是否有理发师需要记账 { msg_arg.mtype = msg_arg.mid; number =msg_arg.mid; msgsnd(respond_id,&msg_arg,sizeof(msg_arg),0);//允许记账 flag=0; } } else if(msgrcv(quest_id,&msg_arg,sizeof(msg_arg),number,quest_flg)) { flag=1; chair--; printf("%d 号理发师记完了帐\n",msg_arg.mid); if(msgrcv(queen_id2,&msg_arg,sizeof(msg_arg),0,quest_flg) >= 0)//响应第一条消息 { chair++; count--; msgsnd(queen_id1,&msg_arg,sizeof(msg_arg),0); printf("%d 号客户从沙发坐上理发椅,等待理发\n",msg_arg.mid); msg_arg.mtype = msg_arg.mid; msg_arg.mid = CHAIR; msgsnd(respond_id,&msg_arg,sizeof(msg_arg),0); if(msgrcv(queen_id3,&msg_arg,sizeof(msg_arg),0,quest_flg) >= 0)//响应第一条消息 { count++; waitingroom--; msgsnd(queen_id2,&msg_arg,sizeof(msg_arg),0); printf("%d 号客户从大厅坐上了沙发,等待理发\n",msg_arg.mid); msg_arg.mtype = msg_arg.mid; msg_arg.mid = SOFA ; msgsnd(respond_id,&msg_arg,sizeof(msg_arg),0); if(msgrcv(quest_id,&msg_arg,sizeof(msg_arg),CUSTOMERREQUEST,quest_flg) >= 0) { waitingroom++; msgsnd(queen_id3,&msg_arg,sizeof(msg_arg),0); printf("%d 号客户走进大厅\n",msg_arg.mid); msg_arg.mtype = msg_arg.mid; msg_arg.mid = WAITINGROOM; msgsnd(respond_id,&msg_arg,sizeof(msg_arg),0); } } } printf("%d chair\n",chair); printf("%d sofa\n",count); printf("%d waitingroom\n",waitingroom); } if(msgrcv(quest_id,&msg_arg,sizeof(msg_arg),CUSTOMERREQUEST,quest_flg) >= 0) { printf("%d chair\n",chair); printf("%d sofa\n",count); printf("%d waitingroom\n",waitingroom); if(chair<3) { chair++; msgsnd(queen_id1,&msg_arg,sizeof(msg_arg),0); printf("%d 号客户坐上理发椅\n",msg_arg.mid); msg_arg.mtype = msg_arg.mid; msg_arg.mid = CHAIR; msgsnd(respond_id,&msg_arg,sizeof(msg_arg),0); } else if(count<4) { count++; msgsnd(queen_id2,&msg_arg,sizeof(msg_arg),0); printf("%d 号客户坐上沙发\n",msg_arg.mid); msg_arg.mtype = msg_arg.mid; msg_arg.mid = SOFA ; msgsnd(respond_id,&msg_arg,sizeof(msg_arg),0); } else if(waitingroom<13) { waitingroom++; msgsnd(queen_id3,&msg_arg,sizeof(msg_arg),0); printf("%d 号客户走进大厅\n",msg_arg.mid); msg_arg.mtype = msg_arg.mid; msg_arg.mid = WAITINGROOM; msgsnd(respond_id,&msg_arg,sizeof(msg_arg),0); } else { printf("%d 号客因人多没有理发离开\n",msg_arg.mid); msg_arg.mtype = msg_arg.mid; msg_arg.mid = -1; msgsnd(respond_id,&msg_arg,sizeof(msg_arg),0); } } } return EXIT_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -