我已经为理发店问题提出了伪代码解决方案。
要求 - 客户可以调用gethaircut(),理发师可以调用cuthair()和可用的座位。 理发师应该睡觉,直到客户打电话给gethaircut。 如果获得n个席位,那么客户应该调用balk(),它只退出该客户线程。 方法gethaircut和cuthair应该只与每个调用者的一个线程并行运行,这意味着只有一个线程应该调用cuthair,而另一个线程调用gethaircut。
只有一个理发师。
这是我提出的解决方案..我真的无法在手机上正确格式化..请耐心等待
// Sem =信号量。 Sry Im在我的手机上
Int n = maxSeats
Sem mutex = new Sem(1)
Sem hairCutMutex = new Sem(1)
Sem canCutHair = new Sem(0)
Sem finishedHairCut = new Sem(0)
客户(){
P(mutex)
if (n == 0) {
V(mutex)
balk();
}
V(mutex)
P(hairCutMutex)
getHairCut()
V(canCutHair)
P(finishedHairCut)
V(hairCutMutex)
P(互斥)
n++
V(互斥)
}
`理发师(){
while(true){
P(canCutHair)
cutHair()
V(finishedHairCut)
} } `