操作系统课程设计报告11.doc_第1页
操作系统课程设计报告11.doc_第2页
操作系统课程设计报告11.doc_第3页
操作系统课程设计报告11.doc_第4页
操作系统课程设计报告11.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

操作系统课程设计报告一 实验题目:理发师问题:理发店由一个等待室和一个理发室组成,等待室有n把椅子而理发室只有一把理发椅。如果没有顾客,理发师就会在理发椅睡觉。如果一个顾客走进理发店,发现理发师正在理发,如果有空椅子可坐,他就坐下来等,如果没有空椅子,他就离开;如果理发师正在理发椅上睡觉,就唤醒理发师进行理发。二 实验目的:1、 掌握基本的同步与互斥算法2、 学会用pv操作来描述算法思想3、 真正理解信号量的作用,理解临界区4、 掌握相关的api的使用方法5、 了解windows中的多线程的并发执行机制,实现进程的同步与互斥三 实验要求:采用系统调用信号量、p、v操作来描述解决理发师问题的算法思想,并编程实现该算法。四 实验环境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( ); /理发 customer() 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_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);printf(理发师已完成理发.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,infinite);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,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,infinite);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 lpparam ) 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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论