⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bar.c

📁 进一步研究和实践操作系统中关于并发进程同步与互斥操作的一些经典问题的解法
💻 C
字号:
#include "ipc.h"int main(int argc,char *argv[]){	int guest;   int rate;	int money;	int bar_num;   Msg_buf msg_arg;	if(argv[1] != NULL) bar_num=atoi(argv[1]);	else exit(EXIT_FAILURE);	if(argv[2] != NULL) rate = atoi(argv[2]);  	else rate = 3;	//附加一个共享内存   buff_key = 101;   buff_num = 100;	pput_key = 102;	pput_num = 1;    shm_flg = IPC_CREAT | 0644;   buff_ptr = (int *)set_shm(buff_key,buff_num,shm_flg);	//附加一个共享内存指针	pput_ptr = (int *)set_shm(pput_key,pput_num,shm_flg);		///建立一条请求消息队列,存放理发师的请求与新顾客的请求   	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);		quest_flg = IPC_NOWAIT; //以非阻塞方式接收请求消息		while(1)	{				if(msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),CUSTOMERREQUEST,quest_flg) >= 0)		{			guest = msg_arg.mid;			msg_arg.mtype = guest;			msg_arg.mid=bar_num;			msgsnd(queen_id1,&msg_arg,sizeof(msg_arg),0);//回应客户理发请求			printf("%d 号理发师为%d 号顾客服务\n",bar_num,guest);			sleep(rate);						msg_arg.mtype = guest;			msg_arg.mid=REQUESTMONEY;         msgsnd(queen_id1,&msg_arg,sizeof(msg_arg),0);//回应客户理发完毕			printf("%d 号理发师为%d 号顾客理发完毕\n",bar_num,guest);			msgrcv(queen_id1,&msg_arg,sizeof(msg_arg),guest,0);//请求付费			money=msg_arg.mid;			printf("%d 号理发师收到%d 号顾客的付费\n",bar_num,guest);			msg_arg.mtype = RECIEVEMONEY;			msg_arg.mid= bar_num;			msgsnd(quest_id,&msg_arg,sizeof(msg_arg),0);//请求记帐			printf("%d 号理发师请求记帐\n",bar_num);			msgrcv(respond_id,&msg_arg,sizeof(msg_arg),bar_num,0);			buff_ptr[*pput_ptr]=bar_num;//写入帐簿			*pput_ptr=(*pput_ptr+1)%100;			msg_arg.mtype = bar_num;			msg_arg.mid= OVER;			msgsnd(quest_id,&msg_arg,sizeof(msg_arg),0);//记帐完毕			printf("%d 号理发师记帐完毕\n",bar_num);		}		else		{			printf("%d 号理发师无事睡觉\n",bar_num);						sleep(rate);		}	}	return EXIT_SUCCESS;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -