操作系统课设收银员与顾客.doc_第1页
操作系统课设收银员与顾客.doc_第2页
操作系统课设收银员与顾客.doc_第3页
操作系统课设收银员与顾客.doc_第4页
操作系统课设收银员与顾客.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目目 录录 1 题目内容及要求题目内容及要求1 1.1题目名称.1 1.2题目描述.1 1.3解题思路.1 1.4程序清单.2 1.5提交结果框图.5 2 总结总结7 3 参考文献参考文献7 1 1 题目内容及要求题目内容及要求 1.1 题目名称题目名称 收银员与顾客(信号量操作) 1.2 题目描述题目描述 编程模拟下面同步问题:在某超市里有 x(shouyin)个收银员,且同时最 多允许有 y(guke)个顾客购物,我们可以将顾客和收银员看成是两类不同的进 程,且工作流程如下图所示。为了利用 PV 操作正确地协调这两类进程之间的工 作,设置了 3 个信号量 xin_guke, x(shouyin)和 y(guke)可由用户输入,信 号量 xin_guke 初值等于 shouyin。 1.3 解题思路解题思路 (1)构筑收银员与顾客的队列 构造两个队列用来分别存放收银员与顾客的 P,V 信息 typedef struct LNode,typedef struct a (2)判定顾客处于哪个操作 void enque(linklist int xin_guke; /初值为收银人数,代表当前可以进入付款状态的人数 int guke,shouyin; /顾客总人数,收银员总人数 typedef struct LNode /结点 char name; LNode *next; *Llist; typedef struct a/链表 LNode *front; Llist last; *linklist; linklist dengdai,jiuxu; void init(linklist l-front=l-last=NULL; void enque(linklist p-name=name; p-next=l-front; l-front=p; /coutfront-name; char deque(linklist if(l-front!=NULL) name=l-front-name; l-front=l-front-next; /coutfront!=NULL) coutfront-namefront=l-front-next; void p() /在信号量上执行 P 操作:当有多余收银员时,进入就绪队列, 当满时,进入等待队列 xin_guke-; if(xin_guke=0) if(dengdai-front!=NULL) coutfront-name0) if(jiuxu-front!=NULL) enque(dengdai,deque(jiuxu); void sy() for(int j=shouyin;j0;j-) if(jiuxu-front!=NULL) coutfront-name0;i-) p(); sy(); for(i=j;i0;i-) v(); int main() coutguke; coutshouyin; if(shouyin0) xin_guke=shouyin; /* guke=8; shouyin=xin_guke; */ init(dengdai); /初始化等待队列 init(jiuxu); /初始化就绪队列 for (int i=guke;i0;i-) enque(dengdai,(char)(i+96); /根据顾客数,将顾客插入等待队列 while(dengdai-front!=NULL|jiuxu-front!=NULL) gk(); return 0; else cout“对不起,不能没有收银员!“endl; return 0; 5 1.5 提交结果框图提交结果框图 1.用户输入客户数,如图 1.5.1 图 1.5.1 输入顾客数 2.用户输入收银员数,如图 1.5.2 图 1.5.2 输入收银员数 6 3.运行结果,如图 1.5.3 图 1.5.3 运行结果 4.当输入数据有误时,如图 1.5.4 图 1.5.4 出错时图 如图所示,可以输入任意数量的顾客数和收银员数。当顾客数大于收银员 数时,后面的顾客将到等待队列中等待前面的顾客付完款。 当前面的顾客将款付完后,后面的顾客进入就绪队列付款,付款后进入等 待队列,表示付款完毕。 7 2 总结总结 通过这次操作系统的课程设计,我研究了收银员与顾客的问题,进一步深 入了解了同步与互斥机制。比如什么是同步,什么是互斥,什么是信号量等等。 课程设计和平时的实验课比较起来有很大的差距,实验课只是将这一章的 一部分内容练习操作一遍,而课程设计需要的是他们综合起来的东西,这要更 难一些。 总体来说我认为操作系统这门学科在计算机科学当是中非常重要的。他将 我们学过的编程语言联系起来,可以说是第一次利用 C+语言利用 windows 的 API 与系统进行“沟通” 。 总而言之,这次操作系统的课程设计收获颇丰,复习了许多东西,也从新 学会了许多东西。我想这也许就是课程设计的最终目的吧。 3 参考文献参考文献 1 刘振安、刘燕君著.C+程序设计课程设计.北京: 机械工业出版社, 2004 2 美Abraham Silberschatz, Peter Baer Galvin, Greg Gagne 著. 郑扣 根

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论