Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace SimulacijaThreading2015
- {
- class Program
- {
- public static SemaphoreSlim regKasa1 = new SemaphoreSlim(1);
- public static SemaphoreSlim regKasa2 = new SemaphoreSlim(1);
- public static SemaphoreSlim brzaKasa1 = new SemaphoreSlim(1);
- public static SemaphoreSlim brzaKasa2 = new SemaphoreSlim(1);
- public static object katanac = new Object();
- public static int red1 = 0, red2 = 0, red3 = 0, red4 = 0;
- public static int brojArtikala = 0;
- public static Random r = new Random();
- public bool zatvoreno = false;
- public static void usaoPrvi()
- {
- lock (katanac)
- {
- red1++;
- Console.WriteLine("{0} ceka da udje u prvi red i trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red1);
- }
- regKasa1.Wait();
- lock (katanac)
- {
- Console.WriteLine("{0} se opsluzuje na prvoj kasi", Thread.CurrentThread.Name);
- red1--;
- }
- Thread.Sleep(150 * brojArtikala);
- Console.WriteLine("{0} je zavrsio kupovinu i napusta supermarket.", Thread.CurrentThread.Name);
- lock (katanac)
- {
- regKasa1.Release();
- }
- }
- public static void usaoDrugi()
- {
- lock (katanac)
- {
- red2++;
- Console.WriteLine("{0} ceka da udje u drugi red i trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red2);
- }
- regKasa2.Wait();
- lock (katanac)
- {
- Console.WriteLine("{0} se opsluzuje na prvoj kasi", Thread.CurrentThread.Name);
- red2--;
- }
- Thread.Sleep(150 * brojArtikala);
- Console.WriteLine("{0} je zavrsio kupovinu i napusta supermarket.", Thread.CurrentThread.Name);
- lock (katanac)
- {
- regKasa2.Release();
- }
- }
- public static void usaoTreci()
- {
- lock (katanac)
- {
- red3++;
- Console.WriteLine("{0} ceka da udje u prvi red i trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red3);
- }
- brzaKasa1.Wait();
- lock (katanac)
- {
- Console.WriteLine("{0} se opsluzuje na prvoj kasi", Thread.CurrentThread.Name);
- red3--;
- }
- Thread.Sleep(150 * brojArtikala);
- Console.WriteLine("{0} je zavrsio kupovinu i napusta supermarket.", Thread.CurrentThread.Name);
- lock (katanac)
- {
- brzaKasa1.Release();
- }
- }
- public static void usaoCetvrti()
- {
- lock (katanac)
- {
- red4++;
- Console.WriteLine("{0} ceka da udje u prvi red i trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red4);
- }
- brzaKasa2.Wait();
- lock (katanac)
- {
- Console.WriteLine("{0} se opsluzuje na prvoj kasi", Thread.CurrentThread.Name);
- red4--;
- }
- Thread.Sleep(150 * brojArtikala);
- Console.WriteLine("{0} je zavrsio kupovinu i napusta supermarket.", Thread.CurrentThread.Name);
- lock (katanac)
- {
- brzaKasa2.Release();
- }
- }
- public static void Ulazak()
- {
- brojArtikala = r.Next(1, 10);
- if (brojArtikala <= 5)
- {
- //moze da bira jednu od 4 kase
- if (red1 < red2 && red1 < red3 && red1 < red4)
- {
- if (red1 > 3)
- {
- Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
- }
- else
- {
- usaoPrvi();
- }
- }
- if (red2 < red1 && red2 < red3 && red2 < red4)
- {
- if (red2 > 3)
- {
- Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
- }
- else
- {
- usaoDrugi();
- }
- }
- if (red3 < red1 && red3 < red2 && red3 < red4)
- {
- if (red3 > 3)
- {
- Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
- }
- else
- {
- usaoTreci();
- }
- }
- if (red4 < red3 && red4 < red2 && red4 < red1)
- {
- if (red4 > 3)
- {
- Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
- }
- else
- {
- usaoCetvrti();
- }
- }
- }
- else
- //moze da bira regularne 2 kase
- {
- if (red1 < red2)
- {
- if (red1 > 3)
- {
- Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
- }
- else
- {
- usaoPrvi();
- }
- }
- if (red2 < red1)
- {
- if (red2 > 3)
- {
- Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
- }
- else
- {
- usaoDrugi();
- }
- }
- }
- }
- static void Main(string[] args)
- {
- int brojKupaca = 20;
- Thread[] threads = new Thread[20];
- for (int i = 0; i < threads.Length; i++)
- {
- threads[i] = new Thread(Ulazak);
- threads[i].Name = string.Format("Kupac #{0}", i + 1);
- threads[i].Start();
- }
- for (int i = 0; i < threads.Length; i++)
- {
- threads[i].Join();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement