问答题
理发店有一位理发师、一把理发椅及三把供等候理发的顾客做的椅子。如果没有顾客,理发师就去睡觉。如果顾客来时所有的椅子都有人,那么顾客就离去。如果理发师在忙而有空闲的椅子,那么顾客就回坐在其中的一个空闲的椅子上。如果理发师在睡觉,顾客会唤醒他。请利用信号量(semaphores),写个程序来协调理发师和顾客进程。
【正确答案】正确答案:semaphore customers=0; semaphore mutex=1: semaphore R=O; main() cobegin{ 理发师: begin repeat P(customers);//有顾客等待 P(mutex); R=R-l;//等待顾客数减- V(mutex): 理发; until false; 顾客: begin repeat P(mutex); //检查是否有空椅子可是坐 j.f(R<3)then ]begin R--R+1; ‘V(customers);//有则坐下,等候顾客数加l V(mutex); 等待理发; end else V(mutex);//无空位离开 until false;
【答案解析】