- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统利用信号量实现银行叫号排队系统课设计实验报告
操作系统课程设计
题目:进程通信与进程同步机制实践
所在学院: 计算机学院
所在班级: 软件1201
学生姓名:
学生学号:
题目
某银行提供5个服务窗口(3个对私服务窗口,1个对公服务窗口,1个理财服务窗口)和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号;若没有空座位,则在门外等待或离开。取号机每次仅允许一位顾客使用,有对公、对私和理财三类号,每位顾客只能选取其中一个。当营业员空闲时,通过叫号选取一位顾客,并为其服务。请用P、V操作写出进程的同步算法。
目的
1、 掌握基本的同步与互斥算法 。
2、学习使用 Linux 中基本的同步对象,掌握相关 API 的使用方法。
3、了解 Linux 中多任务实验环境
Linux CentOS
编译器GCC
编程语言 C语言没有顾客 本程序中设计6个信号量,其中signal_A、signal_B和signal_C分别是对私、对公、理财窗口的同步信号量。若信号量值的等于0,说明当前没有空闲空口,顾客需要等待。另设置一个signal_seat同步信号量,记录当前的座位情况,若该信号量等于0,说明当前没有空座位,顾客需要等待。另有一个signal_customer同步信号量用于记录当前已经取过票的总人数,用于生成票号信息。还有一个mutex互斥信号量,用于实现各进程在对信号量进行操作时的互斥。
顾客进入银行之后,先看通过一个依据系统时间的随机数来确定自己是需要对私、对公还是理财服务(在本程序中分别对应于A类顾客,B类顾客和C类顾客),这三个类型的顾客的比例为3:1:1.然后顾客根据自己需要的服务类型,查看提供相应类型服务的窗口是否空闲,若窗口有空闲,则系统直接按照signal_customer记录的信息,生成票面信息;若窗口没有空闲,则再去查看signal_seat信号量看看是否有空座位,若有空座位,则根据signal_customer记录的信息,生成票面信息;若没有空座位,则通过一个以系统时间为种子的随机数生成器生成一个随机数,帮助顾客确定是要继续等待还是离开,这两种情况的比例为1:1.若顾客选择离开,则相应的进程退出。
当顾客取到票后,便开始查看对应类型的窗口是否有空闲,如果有空闲,则上前办理业务。顾客办理业务需要的时长通过以系统时间为种子的随机数生成器来确定,时长均在10秒到60秒之间。
在程序执行的过程中,顾客的状态每有变换,都会有相应的输出提示信息,并在输出的行尾输出发生该动作时当前的系统时间,以便于我们分析各个顾客进程的执行情况。
说明
本实验在Linux环境下完成,该程序是通过进程实现的。包含一个service可执行文件,一个customer可执行文件和一个deletesem可执行文件。其中service可执行文件用于在内存中申请一个共享内存空间,并将这个内存空间与自身进程绑定;customer可执行文件每执行一次,就增加一个进程,即代表有一位顾客来到。通过多次执行customer可执行文件来模拟多位顾客;deletesem可执行文件用于在service进程和customer进城都执行完毕后,删除内存空间中的信号集。
实验中利用GCC编译器,通过编写Makefile文件来快速编译源代码生成以上三个可执行文件。
程序中各主要函数说明
int createshm( char * pathname, int proj_id, size_t size)
创建共享内存的函数,操作成功则返回共享内存标识符,失败返回-1.
int createsem (const char * pathname, int proj_id, int members, int init_val[])
在共享内训中创建信号量的函数,操作成功则返回信号集标识符,失败返回-1.
int opensem(const char * pathname, int proj_id)
打开信号集函数,操作成功则返回信号集标识符,失败返回-1.
int sem_p(int semid, int index)
P操作函数,操作成功则返回0,失败返回-1.
int sem_v(int semid, int index)
V操作函数,操作成功则返回0,失败返回-1.
int wait_sem(int semid, int index)
等待信号量为1函数,操作成功返回1.
int delete_sem (int semid)
删除信号集函数,操作成功返回0.
int get_sem_val (int semid ,int index)
获取指定信号集中指定下标的信号量的值,操作成功
您可能关注的文档
最近下载
- 医用氧生产工艺规程.doc VIP
- 200吨汽车吊书说明书.pdf VIP
- 0.中国中铁建筑施工典型异常工况安全处置工作指引宣贯材料.pptx VIP
- 2025年河北唐山市路南区专项选聘教师168人笔试备考题库及答案解析.docx VIP
- HanbellRC系列半封闭螺杆压缩机产品样本-RC系列.PDF VIP
- 15J401 钢梯标准图集.pptx VIP
- 山东科学技术版劳动实践指导手册六年级第2课整理与收纳居室整理与清洁学会消毒 教案.docx VIP
- 技嘉主板H610M S2 DDR4 (rev.1.1)用户手册简体中文(版本 1001).pdf
- 2025年河北唐山市路南区选调教师30人笔试备考试题及答案解析.docx
- 2024单簧管协奏曲《帕米尔之音》演奏技巧分析5300字.docx VIP
文档评论(0)