- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
PAGE
操作系统课程设计
实验报告书
题目:
售票员与乘客(信号量操作)
题目编号:
2
院系:
计算机科学与技术软件服务与外包学院
班级:
11级9班
小组成员:
组长:杨扬
学号:111810059
组员:沈菲菲
学号:111810060
组员:
学号:
2013-06-30
目录
TOC\o1-3\h\z\u一、课程设计任务划分 1
(一)课程内容 2
(二)算法 2
(三)算法基本原理 2
三、基本思路 4
(一)变量 4
(二)所用函数 5
(三)流程图 9
四、调试及实验结果 14
五、个人体会 15
PAGE17
一、课程设计任务划分
组员
具体分工
沈菲菲
网上搜索程序资料
程序合并
实验报告书书写
杨扬
程序调试
设计项目流程
心得体会
二、基本原理
(一)课程内容
编程序模拟车站售票厅内进程同步问题,售票厅任何时刻最多可容纳20名购票者进入,否则需要在外面等待。每个购票者可看成一个进程。
(二)算法
信号量与P,V操作
(三)算法基本原理
生产者-消费者问题是一个经典的线程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。在同一个线程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。
多个生产/消费者在有界缓冲上操作。它利用N个字节的共享内存作为有界循环缓冲区,利用写一字符模拟放一个产品,利用读一字符模拟消费一个产品。当缓冲区空时消费者应阻塞睡眠,而当缓冲区满时生产者应当阻塞睡眠。一旦缓冲区中有空单元,生产者线程就向空单元中入写字符,并报告写的内容和位置。一旦缓冲区中有未读过的字符,消费者线程就从该单元中读出字符,并报告读取位置。生产者不能向同一单元中连续写两次以上相同的字符,消费者也不能从同一单元中连续读两次以上相同的字符。
因此售票员与乘客也可转化为生产者与消费者的问题,第一步:确定进程间的关系。售票厅是各进程共享的公有资源,当售票厅中多于20名购票者时,厅外的购票者需要在外面等待。所以进程间是互斥的关系。第二步:确定信号量及其值。只有一个公有资源:售票厅,所以设置一个信号量s。售票厅最多容纳20个进程,即可用资源实体数为20,s的初值就设为20。
实现:begin
s:semaphore;
s:=20;
cobegin
processPI(I=1,2,……)
beginP(s);
进入售票厅;
购票;
退出;
V(s);
end;
coend
当购票者进入售票厅前要执行P(s)操作,执行后若s大于或等于零,说明售票厅的人数还未满可进入。执行后若s小于零,则说明售票厅的人数已满不能进入。这个实现中同时最多允许20个进程进入售票厅购票,其余进程只能等待。
三、基本思路
(一)变量
#defineN2//乘客或售票员的数目
#defineM20//售票厅大小
intin=0;//售票员售票的位置
intout=0;//乘客买票的位置
intbuff[M]={0};//售票厅初始化为0,开始时没有售票员
sem_tempty_sem;//同步信号量,当满了时阻止售票员售票
sem_tfull_sem;//同步信号量,当没售票员时阻止乘客买票
pthread_mutex_tmutex;//互斥信号量,一次只有一个线程访问缓冲
intconductor_id=0;//售票员id
intpassenger_id=0;//乘客id
(二)所用函数
1.voidprint()打印售票厅情况
2.void*conductor()售票员方法
3.void*passenger()乘客方法
4.intmain()主方法
5.sem_wait()
函数原形:
intsem_wait(sem_t*sem);
参数:
sem指向信号灯的指针
返回值:
若成功则返回0,否则返回-1。
我们能用sem_wait来申请共享资源,sem_wait函数能测试所指定信号灯的值,如果该值大于0,那就将他减1并即时返回。我们就能使用申请来的共享资源了。如果该值等于0,调
您可能关注的文档
最近下载
- (高清版)DGJ 08-98-2014 机动车停车场(库)环境保护设计规程.docx VIP
- 《南京夫子庙秦淮河市集调研》课件.ppt VIP
- 司法协理员面试问题及答案.docx VIP
- 养殖污水处理课件.pptx
- 井巷冒顶片帮(必)讲稿.ppt VIP
- 第8课《在实践中提高认识能力》第1框《透过现象认识本质》同步课堂精品课件-【中职专用】《哲学与人生》.pptx VIP
- 聚焦户外混龄游戏,助推幼儿社会性发展.docx VIP
- 医务人员职业防护ppt课件.pptx VIP
- 广东省广州市2025-2026学年九年级上学期开学摸底考语文试卷(含答案).pdf VIP
- 2025年芜湖市12345政务服务便民热线招聘笔试参考题库附答案解析.docx VIP
文档评论(0)