-->
当前位置:首页 > 题库

某银行提供1个服务窗口和10个顾客等待座位。顾客到达银行时,若有空座位,则到取号机领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:(2011全国试题)
cobegin
{
process 顾客i
{
从取号机获得一个号码;
等待叫号;
获得服务;
}
process 营业员
{
while (TRUE)
{

Luz4年前 (2022-09-13)题库574
某银行提供1个服务窗口和10个顾客等待座位。顾客到达银行时,若有空座位,则到取号机领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:(2011全国试题)
cobegin
{
process 顾客i
{
从取号机获得一个号码;
等待叫号;
获得服务;
}
process 营业员
{
while (TRUE)
{
叫号;
为顾客服务;
}
}
}
coend
请添加必要的信号量和P、V(或wait( )、signal( ))操作实现上述过程的互斥和同步。要求写出完整的过程,说明信号量的含义并赋初值。







答案:解:
(说明:此参考答案不是标准答案)
begin
semaphore mutex=1; //用于顾客取号的互斥信号量
semaphore seat=10; //顾客等待座位的资源信号量,当没有空座位时顾客在其上阻塞
semaphore S1=0; //营业员与顾客的同步信号量,当没有顾客时营业员在其上阻塞
semaphore S2=0; //顾客与营业员的同步信号量,等待叫号时顾客在其上阻塞
cobegin(3分)
{
process 顾客i
{
P(seat); //若没有空座位,顾客等待
P(mutex); //取号互斥
从取号机获得一个号码;
V(mutex);
V(S1); //通知营业员,已有顾客
P(S2);
等待叫号;
获得服务;
}(3分)
process 营业员
{
while (TRUE)
{
P(S1); //若无顾客则等待
V(S2); //唤醒等待叫号的顾客
叫号;
V(seat); //空出一个座位(此行放在顾客进程的等待叫号后面也可)
为顾客服务;
}
}
}
coend(4分)
end