【操作系统】某银行提供1个可同时为2个顾客提供服务的柜员机和可用于10个顾客等待座位。 顾客到达银行时,若有空座位,则到取号机领取一个号,等待叫号。取号机每次仅允许一个顾客使用。 当柜员机有空时(当前

题目

某银行提供1个可同时为2个顾客提供服务的柜员机和可用于10个顾客等待座位。 顾客到达银行时,若有空座位,则到取号机领取一个号,等待叫号。取号机每次仅允许一个顾客使用。 当柜员机有空时(当前有<2个顾客在使用柜员机),系统通过叫号选取一位顾客,并为其服务。请用P、V原语(wait和signal操作)实现上述过程的互斥和同步。要求写出完整的过程,说明各信号量的含义并赋初值。
begin
parbegin
pmach; //柜员机进程
pcus_1; pcus_2; pcus_3; … //顾客进程
parend
end

答案

在这里插入图片描述

代码

/*

seets表示空余座位数量的资源信号量,初值为10;

mutex互斥信号量,初值为1,用于实现对取号机的互斥访问;

empty表示柜员机没有提供服务的位置数量(即空位,无顾客在用的位置)的资源信号量,初值为2(一开始有2个空位);

*/

Var seets,mutex,empty,full : semaphore:=10,1,2,0; 

pcus_i: //第i个顾客

begin

    repeat

        wait(seets); //等待空余座位

        wait(mutex);//等待取号机空闲

        从取号机获得一个号码;

        signal(mutex);//离开取号机,使得其他等待取号机的顾客可取号

        等待叫号;

        signal(seets);//离席去使用柜员机

        获得柜员机服务;

        服务完成;

        signal(empty);//离开柜员机,柜员机增加一个空位

    until false

end



pmach: //柜员机进程

begin

    repeat

        wait(empty);//柜员机有空位,就叫号

        叫号;

        为顾客服务;

    until false

end


  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三桥君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值