




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年上部卸料吊袋离心机项目商业计划书
- 2025-2030年三相单眼大锅电磁灶项目投资价值分析报告
- 2025-2030年UV光固机项目投资价值分析报告
- 2025-2030年PU胶辊项目投资价值分析报告
- 甘肃畜牧工程职业技术学院《食品营养学实验》2023-2024学年第二学期期末试卷
- 江苏苏州高新区第一中学2025届高三下学期5月质量检查生物试题试卷含解析
- 2025届淮安市重点中学高三下学期3月适应性考试数学试题含解析
- 2025年福建省龙岩市连城一中高考诊断性测试物理试题含解析
- 郑州黄河护理职业学院《化工原理一》2023-2024学年第二学期期末试卷
- 南昌市进贤县2025年四年级数学第二学期期末预测试题含解析
- 七年级体育导学案
- 【金融】银行业DeepSeek大模型应用跟踪报告
- 2025年中高考百日誓师大会活动主持词:百日鏖战酬壮志 青春逐梦向未来
- 2025年公共交通卫生提升方案
- 2025-2030年中国充电电池行业运营状况与未来发展趋势分析报告
- 2025届上海市高三下学期2月联考调研英语试题【含答案解析】
- 发展我国银发经济面临的挑战和优化路径研究
- GA/T 2146-2024法庭科学涉火案件物证检验移动实验室建设通用要求
- 游泳馆安全知识培训课件
- 高速铁路设计规范
- 《电气基础知识培训》课件
评论
0/150
提交评论