1、操作系统课程设计报告操作系统课程设计报告 一一 实验题目实验题目:理发师问题:理发店由一个等待室和一个理发 室组成,等待室有 N 把椅子而理发室只有一把理发椅。如果没有 顾客,理发师就会在理发椅睡觉。如果一个顾客走进理发店,发 现理发师正在理发,如果有空椅子可坐,他就坐下来等,如果没 有空椅子,他就离开;如果理发师正在理发椅上睡觉,就唤醒理 发师进行理发。 二二 实验目的:实验目的: 1、 掌握基本的同步与互斥算法 2、 学会用 pv 操作来描述算法思想 3、 真正理解信号量的作用,理解临界区 4、 掌握相关的 API 的使用方法 5、 了解 Windows 中的多线程的并发执行机制,实现 进
2、程的同步与互斥 三三 实验要求:实验要求: 采用系统调用信号量、p、v 操作来描述解决理发师问题 的算法思想,并编程实现该算法。 四四 实验环境实验环境 1、 操作系统:Windows 7 2 2、 编译环境:VS2008 五五 PV 操作代码操作代码 int waiting=0 ; /顾客数 int chairs=n; /椅子数 semaphore customers=0, barbers=0,mutex=1; barber() while(TRUE); /理完一人,还有顾客吗? P(cutomers); /无顾客则理发师睡眠 P(mutex); /进程互斥 waiting := waiti
3、ng 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
4、#define CUSNUM 8 #define CHAIRS 5 char 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+;