某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。

某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。取号机每次仅允许一位顾客使用。当营业员空闲时,通过叫号选取一位顾客,并为其服务。顾客和营业员的活动过程描述如下:
某银行提供1个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上领取一个号,等待叫号。_第1张图片

cobegin
 
 {
      process 顾客i
  {
           从取号机获得一个号码;
           等待叫号;
           获得服务;
  }
  process 营业员
  {
           while (TRUE)
           {
                     叫号;
                     为顾客服务;
           }
  }
  } coend
//首项应该定义信号量
semaphore mutex=1,seats=10,service =0;
semaphore mutex = 1,service = 0,seets = 10;
//然后开始写进程

//顾客进程
void customers(){
    P(seats); //首先需要进行申请座位
    P(mutex); //顾客之间的取号进程是互斥的,用metex来实现
    取号;
    V(mutex);
    V(service);//等待叫号
    等待获取服务;
}

//`营业员进程
void assistant(){
    P(service); //提供服务
   叫号并且为客户提供服务;
    V(seats); //生产座位
}

void main(){
    cobegin
        customers();
        assistant();
    coend
}

你可能感兴趣的:(操作系统练习题,操作系统)