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 
 Aşağıdaki sözde kod berber ve müşteriler için ölümcül kilitlenme olmayan bir çözümdür ancak kaynak açlığına yol açabilir.

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 
 Modern Operating Systems (3rd Edition) by Andrew S. Tanenbaum
 The Little Book of Semaphores by Allen B. Downey, http://greenteapress.com/semaphores 

 Ayrıca bakınız 
 Makarna yiyen düşünürler sorunu
 Randevu sorunu

Kategori:Bilgisayar mühendisliği
Kategori:İşletim sistemleri