版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计报告一 实验题目:理发师问题:理发店由一个等待室和一个理发室组成,等待室有n把椅子而理发室只有一把理发椅。如果没有顾客,理发师就会在理发椅睡觉。如果一个顾客走进理发店,发现理发师正在理发,如果有空椅子可坐,他就坐下来等,如果没有空椅子,他就离开;如果理发师正在理发椅上睡觉,就唤醒理发师进行理发。二 实验目的:1、 掌握基本的同步与互斥算法2、 学会用pv操作来描述算法思想3、 真正理解信号量的作用,理解临界区4、 掌握相关的api的使用方法5、 了解windows中的多线程的并发执行机制,实现进程的同步与互斥三 实验要求:采用系统调用信号量、p、v操作来描述解决理发师问题的算法
2、思想,并编程实现该算法。四 实验环境1、 操作系统:windows 72、 编译环境:vs2008五pv操作代码int waiting=0 ; /顾客数 int chairs=n; /椅子数 semaphore customers=0, barbers=0,mutex=1; barber() while(true); /理完一人,还有顾客吗? p(cutomers); /无顾客则理发师睡眠 p(mutex); /进程互斥 waiting := waiting 1; v(barbers); /用一个理发师去为这个顾客理发 v(mutex); /开放临界区 cut-hair( ); /理发 cus
3、tomer() p(mutex); /进程互斥 if (waiting) waiting := waiting+1; v(customers); /之前无顾客,此时有顾客时,唤醒理发师 v(mutex); /开放临界区 p(barbers); /无理发师, 顾客等待 get-haircut( ); /顾客理发完走下理发椅 else v(mutex); /没座位了六 源代码#include #include #include #include #define cusnum 8#define chairs 5char customer_name=wait_customers;char barker
4、_name=sleep_barker;char cutting_name=cutting_hair;char mutex_name=mutex_sleep_barker;handle customer,barker,cutting;handle mutex;bool isopen=true;dword winapi barker( lpvoid lpparam );dword winapi customer( lpvoid lpparam );int waitting = 0;int finishnum = 0;void cutting_hair()sleep(rand()%3000);pri
5、ntf(理发师已完成理发.n);finishnum+;releasesemaphore(cutting,1,null);waitforsingleobject(customer,infinite);if ( waitting=0 & finishnum=6)isopen = false;releasemutex(mutex);printf(理发师已理完至少六人,且没人在等待,所以理发店关门.n);elsereleasemutex(mutex);void hair_cut(int i)printf(顾客%d 已经完成理发.nn,i);waitforsingleobject(cutting,inf
6、inite);printf(顾客%d 完成理发离开了.nn,i);void main( void ) dword dwthreadid, dwthrdparam = 1; handle hbarkerthread;handle hcustomerthread8;customer=createsemaphore(null,0,cusnum,customer_name);barker=createsemaphore(null,0,1,barker_name);cutting=createsemaphore(null,0,1,cutting_name);mutex=createmutex(null,
7、false,mutex_name); hbarkerthread = createthread( null, 0, barker, &dwthrdparam, 0, &dwthreadid); int num8;int i=1;while(i=cusnum)numi=i;hcustomerthreadi-1 = createthread( null, 0, customer,&numi, 0, &dwthreadid); i+;if (hbarkerthread = null) printf(创建理发师线程失败);else waitforsingleobject(hbarkerthread,i
8、nfinite);closehandle( hbarkerthread ); dword winapi barker( lpvoid lpparam ) while(isopen)waitforsingleobject(customer,infinite);waitforsingleobject(mutex,infinite);waitting = waitting - 1;releasesemaphore(barker,1,null);releasemutex(mutex);cutting_hair(); return 0;dword winapi customer( lpvoid lppa
9、ram ) int i=*(int*)lpparam;sleep(rand()%45000);long waitingnum;if (!isopen)printf(理发店已经关门了.n);elsewaitforsingleobject(mutex,infinite);if(waittingchairs)printf(顾客%d 进店且等待.nn,i);waitting = waitting + 1;releasesemaphore(customer,1,&waitingnum);releasemutex(mutex);waitforsingleobject(barker,infinite);printf(理发师准备为顾客%d理发.n,i);hair_cut(i);elseprintf(这儿没有位置给顾客%d ,所以他离开了.,i);releasemutex(mutex);return 0; 七 运行结果截图八 流程图九 课程设计总结这次课设收获很多,之前在课上学的都是那些纯理论的东西,感觉无法跟实际相连。所以刚开始拿到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026上半年四川成都市大邑县医疗卫生事业单位考核招聘高层次人才23人备考题库含完整答案详解(历年真题)
- 2026内蒙古包头外国语实验学校教师招聘备考题库(黄金题型)附答案详解
- 2026宁夏银川丽人妇产医院招聘28人备考题库附答案详解【能力提升】
- 2026云南曲靖市罗平县妇幼保健院招聘编外人员18人备考题库含完整答案详解【典优】
- 2026天津市勘察设计院集团有限公司招聘4人备考题库【考点提分】附答案详解
- 2026云南昆明聂耳交响乐团编外人员招聘2人备考题库附完整答案详解(考点梳理)
- 中移动金融科技有限公司2026春季园招聘备考题库及参考答案详解【a卷】
- 2026中国邮政集团有限公司安徽省分公司社会招聘备考题库(巩固)附答案详解
- 2026广东省第三荣军优抚医院招聘1人备考题库及参考答案详解(培优b卷)
- 2026广东中山南头镇北帝社区招聘合同制工作人员1人备考题库及参考答案详解【培优b卷】
- 英语四级词汇加例句
- 四级翻译句子及答案
- 中学语文拟写人物短评课件
- 四川大学成人教育 《工程估价》 期末考试复习题及参考答案
- NB/T 10727-2021煤矿膏体充填开采技术规范
- GB/T 41498-2022纤维增强塑料复合材料用剪切框测定面内剪切应力/剪切应变响应和剪切模量的试验方法
- 博弈策略的生活解读 课件
- 工学操作系统安全讲稿课件
- 4+第四章-网络空间主权制度-课件
- 灌注桩低应变法参数表
- 浦发银行个人信用报告异议申请表
评论
0/150
提交评论