请在 下方输入 要搜索的题目:

理发店里有一位理发师、一把理发椅和 N 把供等候理发的顾客坐的椅子。如果没有顾客,理发师便在理发椅上睡觉。当一个顾客到来时,它必须叫醒理发师。如果理发师正在理发时又有顾客来到,如果有空椅上可坐,顾客就坐下来等待,否则就离开理发店。

理发店里有一位理发师、一把理发椅和 N 把供等候理发的顾客坐的椅子。如果没有顾客,理发师便在理发椅上睡觉。当一个顾客到来时,它必须叫醒理发师。如果理发师正在理发时又有顾客来到,如果有空椅上可坐,顾客就坐下来等待,否则就离开理发店。

发布时间:2024-12-17 08:35:22
推荐参考答案 ( 由 快搜搜题库 官方老师解答 )
联系客服
答案:本题使用 3 个信号量和一个控制变量:控制变量 waiting 用来记录等候理发的顾客数,初值为 0;信号量 customers 用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为 0;信号量 barbers 用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为 0;信号量 mutex 用于互斥,初值为 1。同步算法描述如下:Semaphore customers=0;/*等候理发的顾客数*/Semaphore barberers=0;/*等候顾客的理发师数*/Semaphore mutex=1;Int waiting=0;Main(){ cobeginBarbers();Customers();Coend}Barber(){While(true){Wait(customers); /*是否有等候的顾客*/Wait(mutex);Waiting=waiting-1; /*顾客数减 1*/Signal(barbers); /*理发师开始理发*/Signal(mutex);理发;}}Customer(){Wait(mutex);If(waiting<N){Waiting=waiting+1; /*若有空椅子,等候的顾客数加 1*/Signal(customers);Signal(mutex);Wait(barbers);坐下等候服务;}Else{Signal(mutex); /*无空椅子则离开*/}}
专业技术学习
专业技术学习
搜搜题库系统