Uyuyan berber problemi ? java

Uyuyan berber problemi ? java

Bir berber dükkanı bekleme odası, n adet bekleme sandalyesi ve bir de berber koltuğundan oluşmaktadır. Eğer traş edilecek müşteri yoksa berber uyumaktadır. Eğer bir müşteri geldiğinde bütün bekleme sandalyeleri dolu ise müşteri dükkanı terk eder. Eğer müşteri geldiğinde berber başka bir müşteriyi traş ediyorsa, buna karşılık boş bekleme sandalyesi varsa müşteri kuyruğa girip sandalyeye oturur. Berber uyuduğu zaman müşteri berberi uyandırmaktadır. Kritik alanlara giriş gerekirse semafor kullanınız.

Kod Java dilinde yazılmıştır.

BerberDukkani.java


import java.util.concurrent.Semaphore;

public class BerberDukkani
{

private Semaphore berberSandalyesi;
private Semaphore sandalyeler;
private Semaphore berber;

private int bekleyenMusteriler;
private final int sandalyeSayisi;

private static final int kesmeZamani = 1000;

public BerberDukkani(int sandalyeSayisi)
{

berberSandalyesi = new Semaphore(1, true);
sandalyeler = new Semaphore(0, true);
berber = new Semaphore(0, true);

this.sandalyeSayisi = sandalyeSayisi;
bekleyenMusteriler = 0;

berberHazir();
}

private void berberHazir()
{
System.out.println(“Berber bosta , uyuyor.”);
berber.release();
sandalyeler.release();

}

public void musteriHazir(Musteri c)
{
System.out.println(c + ” numara sac kestirmek istiyor.”);

if(berberSandalyesi.availablePermits()musteriOturdu(c);

if(c.kestirmekIstiyor())
{
try
{

berberSandalyesi.acquire();
tras(c);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}

public void musteriOturdu(Musteri c)
{

if(bekleyenMusteriler < sandalyeSayisi) { try { bekleyenMusteriler++; System.out.println(c + ” numara sandalyeye oturdu ve bekliyor. ” + bekleyenMusteriler + ” bekleyen musteri var.”); sandalyeler.acquire(); } catch (InterruptedException e) { e.printStackTrace(); } } else { System.out.println(c + ” numara giremedi. Cunku dukkan dolu.”); c.ayrilmakIstiyor(); } } public void tras(Musteri c) { if(bekleyenMusteriler > 0)
bekleyenMusteriler–;

try
{
berber.acquire();
System.out.println(c + ” numara berberi uyandirdi , sac kestiriyor.”);

Thread.sleep(kesmeZamani);
}
catch (InterruptedException e1)
{

e1.printStackTrace();
}
System.out.println(c + ” numara sacini kestirdi ve dukkandan ayrildi.”);
berberSandalyesi.release();
berberHazir();
}

public static void main(String[] args)
{

int musteriSayisi = 100;

BerberDukkani sh = new BerberDukkani(5);

Thread[] cust = new Thread[musteriSayisi];

for(int i=0; icust[i] = new Musteri(sh, “” + i);

for(int i=0; icust[i].start();
}
}

Musteri.java

 

import java.util.Random;

public class Musteri extends Thread
{
private String isim;
private BerberDukkani dukkan;

private Random r;

private boolean kestirmekIstiyor;

public Musteri(BerberDukkani dukkan, String isim)
{
this.isim = isim;
this.dukkan = dukkan;
kestirmekIstiyor = true;

r = new Random();

}

public void run()
{
bosZaman();
dukkan.musteriHazir(this);

}

public boolean kestirmekIstiyor()
{
return kestirmekIstiyor;
}

public void ayrilmakIstiyor()
{
kestirmekIstiyor = false;
}

public void bosZaman()
{
try
{
this.sleep(Math.abs(r.nextInt(100000)));
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}

public String toString()
{
return isim;
}

}

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: -1 (from 1 vote)
Uyuyan berber problemi ? java, 5.0 out of 5 based on 1 rating

696 Görüntülenme

 

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>