1、嗜睡的理发师问题:一个理发店由一个有 N 张沙发的等候室和一个放有一张理发椅的理发室组成。没有顾客要理发时,理发师便去睡觉。当一个顾客走进理发店时,如果所有的沙发都已经占用,他便离开理发店;否则,如果理发师正在为其他顾客理发,则该顾客就找一张空沙发坐下等待;如果理发师因无顾客正在睡觉,则由新到的顾客唤醒理发师为其理发。在理发完成后,顾客必须付费,直到理发师收费后才能离开理发店,试用信号量实现这一同步问题。 int waiting ;//等候理发的顾客数 int CHAIRSr;//为顾客准备的椅子数 semaphore Customers,babers,mutex; Customers=0; barbers=0; waiting=0; mutex=1; barber( )//理发师进程 { while(TRUE) { wait(customers); //若无顾客,理发师睡眠 wait(mutex);//进程互斥 waiting=waiting-1;//等待顾客数少一 signal(barbers);//理发师去为一个顾客服务 signal(mutex);//离开临界区 Cut_hair(); } } Customer (int i) { wait(mutex);//进程互斥 if(waiting