Uyuyan berber problemi – C#

Uyuyan berber problemi – C#

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 C# dilinde yazılmıştır.

class Program
{
internal static AutoResetEvent customerEvent = new AutoResetEvent(false);
internal static ConcurrentQueue queue = new ConcurrentQueue();

static void Main(string[] args)
{
Random rand = new Random();
new Thread(Barber.CutHair) { IsBackground = true, Name = “Berber” }.Start();

Thread.Sleep(100);

Thread.CurrentThread.Name = “Main”;
// 25 tane Müşteri oluşturuyoruz.
for (int i = 0; i < 25; i++)
{
int temp = i;
Thread.Sleep(rand.Next(600, 2000));
Customer c = new Customer() { Name = "Müşteri " + temp };
queue.Enqueue(c);

if (queue.Count == 1)
{
Customer.WakeUpBarber();
}
}

Console.ReadKey();
}
}

class Customer
{
public string Name { get; set; }

internal static void WakeUpBarber()
{
Program.customerEvent.Set();
}
}

class Barber
{
internal static void CutHair()
{
while (!Program.queue.IsEmpty)
{
Customer c;

// her bir saniye de bir müşterinin saçını kestiriyoruz
Thread.Sleep(1000);

// her bi saç kesimi bittikten sonra müşteriyi kuyruktan çıkartıyoruz.
if (Program.queue.TryDequeue(out c))
{
Console.WriteLine("Müşterinin saç kesimi bitti {0}", c.Name);
}
else
{
// aşağıdaki senaryo asla olmayacak (dükkanda en az bir berber olduğu sürece)
Console.WriteLine(" :) Müşteri gitmiyor");
}
}

Console.WriteLine("Berberimizi uyuyuzor. ZzZzZz");
GoToSleep();
}

private static void GoToSleep()
{
using (Markers.EnterSpan("Beklemedeyiz"))
{
Program.customerEvent.WaitOne();
Console.WriteLine("Müşterimiz geldi ve berberimizde uyandı");
}
CutHair();
}
}

VN:F [1.9.22_1171]
Rating: 3.0/5 (3 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)
Uyuyan berber problemi - C#, 3.0 out of 5 based on 3 ratings

638 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>