操作系统--理发师问题
设计思想的说明:
打瞌睡的理发师问题是一种同步问题的抽象描述。计算机系统中的每个进程都
可以消费或生产某类资源,当系统中某一进程使用某一资源时,可以看作是消耗,
且该进程称为消费者。而当某个进程释放资源时,则它就相当一个生产者。因此此
题可看作是 n 个生产者和 1 个消费者问题。顾客作为生产者,每到来一个就使计
数器 count 增加 1,以便让理发师理发(相当于消费)至最后一个顾客(相当于
产品)。并且,第 1 个到来的顾客应负责唤醒理发师;如果不是第 1 个到达的顾
客,则在有空椅子的情况下坐下等待,否则离开理发店(该消息可由计数器
count 获得),所以可以通过一个有界缓冲区把理发师和顾客联系起来通过对信号
进行 P、V 操作来实现有关问题和相关描述。
源程序文件:
#include<windows.h>
#include<stdio.h>
#include<iostream>
#include<process.h>
#include <conio.h>
#include<ctime>
using namespace std;
#dene CHAIRS 3 //椅子的个数
#dene BARBERS 1 //理发师的个数
#dene CUSTOMESTOCOME 7 //将要来的顾客的数目
typedef HANDLE semaphore;
static int count=0; //记录理发店顾客的总数,初始化为0
int leaved=0; //记录理发店顾客的总数,初始化为0
int waiting=0;
time_t endtime; //关闭营业的时间
//coustomers初始化为0,最大顾客数为3
semaphore
customers=CreateSemaphore(NULL,0,CHAIRS,TEXT("customers
"));
//barbers的数量初始化为1,假设一共有1个barber
semaphore
barbers=CreateSemaphore(NULL,BARBERS,BARBERS,TEXT("ba
rbers"));