荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: huhaiming (一生只爱她), 信区: CIE
标  题: 2000计算机B班说的理发师问题
发信站: 荔园晨风BBS站 (Thu Mar 20 10:37:33 2003), 站内信件

下载在我的ftp里面
共享帐号->操作系统->理发师问题.doc

        理发师问题      2003-3-20
#define CHAIRS 5       //凳子数
struct semaphore{
int value;
struct PCB *waiting_queue
};

semaphore  customers = 0;  //等候服务的顾客数
semaphore  barbers = 0;    //等候服务的理发师数
semaphore  mutex = 1;     //互斥信号量
int waiting = 0;            //等候的顾客(还未理发的)

void barber(void)
{
  while(TRUE)
  {
P(customers);    //如果顾客数是0,则睡觉
P(mutex);       //要求进程等候
waiting --;       //等候顾客数减一
V(barbers);      //一个理发师开始理发
V(mutex);       //释放等候
cut-hair();       //理发(非临界区操作)
}
}

void customer(void)
{
  P(mutex);             //进入临街区
if(waiting < CHAIRS)   //如果没有空的椅子就离开
{
  waiting ++;          //等候顾客数加一
         V(customers);        //如果必要的话,唤醒理发师
  V(mutex);           //释放访问等候
  P(barbers);          //如果barber为0,就睡觉
  get-haircut();        //坐下等候服务
}
else
{
  V(mutex);          //店里人满了,走吧
}
}

--

菩提本无树,明镜亦非台

本来无一物,何处惹尘埃

※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.200]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店