银行排队系统

2020-06-18 19:03

1、 编程实现一个“银行排队模拟系统” 思想:

程序等待标准输入,若检测到有标准输入,则创建对应的进程。 如果目前等待态的进程个数等于座位数,在门外等待(即放入消息队列等待创建);若目前阻塞的进程个数小于座位数则进程阻塞。 与此同时,检测等待态的进程个数小于座位数,消息队列中存在消息,则从消息队列中取出一条消息,同时创建一个新进程。

本程序使用信号量进行进程间通信,使用消息队列存储从stdin输入的消息。

设置一信号量,标示大厅中座位。 设置一消息队列,标示在门外等待。

本程序,没有实现,老师所说的,“窗口进程”。只是在主控进程中,对S3,S4进行了操作来实现与子进程的通信。

相当于,主控进程作为一个窗口进程,来处理各个客户进程。 由于,想要做到,在同一时间,主控进程最多只有两个子进程(客户进程)在执行,其他的都在阻塞状态,因此,本程序,将S3的初始值设置为2

1) 该程序模拟客户到银行取号-排队-被叫号-被服务的过程; 2) 程序执行流程如下:

Step1: 客户到达银行,并从取号机取号;

Step2: 如果大厅中有空闲座位,则座下等待,否则,在大厅外等待;

Step3: 银行职员如果发现有客户等待,则依次叫号服务,否则休息;

Step4: step1-step4重复执行 3) 大厅中座椅数量为20个; 4) 服务窗口为2个;

5) “客户到来”通过命令行输入客户名字模拟;

6) 为了模拟实际情况,每个客户服务时间不小于20秒,可随机确定;

7) 程序顺序列出不同窗口服务客户的:名称,窗口号,服务时间 2、 提示

1) 需一个主控进程,随时监控客户到来,并为之创建进程; 2) 取号机应视为互斥型临界资源 3) 座椅应视为临界资源

4) 客户等待及被叫号应视为进程间同步过程 主控进程(serve.c)执行流程图:

客户端进程(client.c)执行流程图:

需求分析:

本系统,没有实现,窗口进程,最初目的在于,保证在同一时间,父进程即主控进程最多具有2个子进程在执行。

本模拟系统需要两个程序,一个作为主控进程,负责宏观调度(检测是否有标准输入,如果有,则创建子进程···);一个作为子进程,负责输出服务窗口(自己的PID),系统对自己的服务时间,自己等待系统服务的时间,(也可输出自己的名称,此处的传值方式与信号量的ID原理相同,因此省去本项)。 PS:此程序以实现 serve.c 为主控进程

client.c为子进程,子进程的二进制文件名必须为client,绝对路径必须为“mnt/usb/signal”如果想要修改,可以参看课本execle函数的使用守则

del.c如果主控进程异常退出但是有没有执行删除消息队列,信号量集合是使用,记得修改参数 serve.c

#include #include #include #include #include #include #include #include jmp_buf crt;//设置跳转节点 jmp_buf end;

char *env_init[]={\初始化环境表中的信息

union semun//使用信号量函数,我们必须自己定义 semun 联合类型。 { };

int val;

struct semid_ds *buf; unsigned short *array;


银行排队系统.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:句子残缺

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: