睡眠理发师监护仪解决方案指南

时间:2016-02-26 20:46:22

标签: multithreading operating-system monitor concurrent-programming

我正在尝试使用两个理发师和三种类型的顾客为睡眠理发师问题编写一个监控解决方案,他们要么只等待理发师1,要么理发师2,要么可能不关心哪个理发师剪头发。

我希望能就这个问题提供指导 -

到目前为止,我的想法是该算法将为等待的客户使用单个列表,并且可以使用诸如

之类的过程。

try_to_get_haircut()

if_not_first()

wake_up_barber()

wait_for_haircut()

1 个答案:

答案 0 :(得分:0)

下面是一个理发解决方案,我希望它能为你指导。

monitor sleeping_barber{
 condition wait_for_cust, wait_for_barber ;
 int wait;
 entry barber{
   if (wait == 0) then cwait(wait_for_cust);
   wait = wait - 1;
   csignal(wait_for_barber); }

entry cut_customer_hair(){
 if(wait < seat_num)
 {
    wait = wait + 1;
    csignal(wait_for_cust);
    cwait(wait_for_barber);
    do_haircut();
 }
}
{ wait = 0;}}