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)
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
This article is issued from Vikipedi - version of the 4/7/2013. The text is available under the Creative Commons Attribution/Share Alike but additional terms may apply for the media files.