Uyuyan berber sorunu

Bilgisayar mühendisliğinde, uyuyan berber sorunu işletim sistemleri konusunda klasik bir sorundur. Berber ve müşteriler prosesler olarak düşünülebilir.

Gerçekleme

Semaphore Müşteriler = 0
Semaphore Berber = 0
Semaphore sandalyelereErişim = 1  # mutex
int BoşSandalyeSayısı = N  # toplam sandalye sayısı

def Berber():
  while true:                 # Bir sonsuz döngü içinde çalış.
    P(Müşteriler)             # Bir müşteri yakalamaya çalış. Eğer uygun bir müşteri yoksa uyu.
    P(sandalyelereErişim)     # Uyandım - uygun sandalye sayısını değiştir.
    BoşSandalyeSayısı++       # Bir sandalye boşa çıktı.
    V(Berber)                 # Tıraşa hazırım.
    V(sandalyelereErişim)     # Artık sandalyeler üzerinde kilide ihtiyaç yok.
    # (Tıraş)

def Müşteri():
  while true:                 # Bir sonsuz döngü içinde çalış.
    P(sandalyelereErişim)     # Sandalyelere ulaşmaya çalış.
    if BoşSandalyeSayısı > 0: # Eğer boşta sandalye varsa:
      BoşSandalyeSayısı--     #   bir sandalyeye otur
      V(Müşteriler)           #   müşteri bekleyen berberi uyar
      V(sandalyelereErişim)   #   artık sandalyeler üzerinde kilide ihtiyaç yok
      P(Berber)               #   sıra bu müşterinin, fakat berber meşgulse bekle.
      # (Tıraş)
    else:                     # boşta sandalye yok; şanssızlık...
      V(sandalyelereErişim)   #   sandalyeler üzerindeki kilidi bırakmayı unutma!
      # (Tıraş olmadan ayrıl)

Kaynakça

Ayrıca bakınız