我正在尝试为睡眠理发师问题编写一个监视器解决方案,使用两个理发师和三种类型的客户,他们要么只等待理发师 1、理发师 2,要么可能不在乎哪个理发师剪头发。
我希望在这个问题上得到指导——
到目前为止,我的想法是,该算法将为等待的客户使用单个列表,并且可以使用诸如
try_to_get_haircut()
if_not_first()
wake_up_barber()
wait_for_haircut()
下面是一个理发师解决方案,我希望它能为您提供指导。
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;}}