五真经之理发师问题扩展(电子科技大学)
有一个理发师一把理发椅和n把供等候理发的顾客坐的椅子若没有顾客则理发师睡觉当一个顾客到来时必须唤醒理发师进行理发若理发师正在理发又有顾客到来则若有空椅子可坐就坐下来等若没有空椅子就离开
问题分析 需要设置一个信号量barber初值为用于控制理发师和顾客之间的同步关系还需要设置一个信号量customer初值为用于离开顾客与等候顾客之间的同步控制为了记录等候的顾客数应该设置一个计数器count初值为当一个顾客到达时需要在count上做加操作并根据count值的不同分别采取不同的动作当顾客离开时要对count上做减操作并根据count值的不同分别采取不同的动作由于count是共享变量因此要互斥使用为此设置一个互斥信号量mutex
The PV code Using Pascal
begin var barber=customer=count=mutex=:semaphore; cobegin process barber begin repeat; p(customer); p(mutex); count=count; v(barber); v(mutex); 理发; until false end
返回《操作系统之PV金典》 [] [] [] |