这个理发店信号量解决方案是否有错误?

时间:2017-10-25 05:51:11

标签: multithreading concurrency thread-safety semaphore pseudocode

我已经为理发店问题提出了伪代码解决方案。

要求 - 客户可以调用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)

} } `

0 个答案:

没有答案