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

Uyuyan berber sorunu

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) == Kaynaklar == * 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

Kaynaklar

Vikipedi

Yanıtlar