多理发师的进程同步问题

阅读: 评论:0

多理发师的进程同步问题

多理发师的进程同步问题

1、题目

一个理发店由一个有张沙发的等候室和一个放有一张理发椅的理发室组成,没有顾客要理发时,理发师便去睡觉,当一个顾客走进理发店时,如果所有的沙发都已被占用,他便离开理发店,否则,如果理发师正在为其他顾客理发,则该顾客就找一张空沙发坐下等待;如果理发师因无顾客正在睡觉,则由新到的顾客唤醒理发师为其理发。在理发完成以后,顾客必须付费,直到理发师收费后才能离开理发店。
问:如果有多个理发师,并配有一名收银员,信号量该如何实现这一同步。

2、分析

临界资源:
  • 设置一个整型变量count来对占用沙发的顾客计数;
  • mutex1=1:实现理发师进程对客户的互斥访问
  • mutex2=1:实现顾客进程对沙发的互斥访问
  • mutex3=1:实现顾客进程对收银员的互斥访问
同步信号量:

理发师与顾客的同步

  • empty=n:是否有空闲理发椅,n个理发师
  • full=0:理发椅上是否坐有等待理发的顾客

顾客和收营员的同步

  • payment=0:等待付费
  • receipt=0:等待收费
    //顾客进程没有whilewait(mutex2);if(count>=N) {  signal(mutex2);离开;}else{ count++;signal(mutex2);//进店坐下;wait(empty);离开沙发,坐到理发椅上;wait(mutex2);count--;signal(mutex2);signal(full);正在理发;wait(mutex3);付费;signal(payment);wait(receipt);signal(mutex3);离开;}
//理发师while(true){wait(full);wait(mutex);顾客理发; signal(mutex);signal(empty);}
//收银员while(true){wait(payment);收费; signal(receipt)}

本文发布于:2024-02-01 09:52:47,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170675236935802.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:理发师   进程
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23