Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Threading;
- namespace LASTTRYTODAY
- {
- 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 int vrijemeOpsluzivanja = 150;
- public static object katanac = new Object();
- public static int brojArtikala = 0;
- public static Random r = new Random();
- public static int red1 = 0, red2 = 0, red3 = 0, red4 = 0;
- public static bool usao1 = false, usao2 = false, usao3 = false, usao4 = false;
- public static void UlazakURed()
- {
- brojArtikala = 6;
- lock (katanac)
- {
- if (brojArtikala <= 5) // mozebirati sve redove
- {
- if (red2 > red1 || red3 > red1 || red4 > red1)
- {
- if (red1 < 3)
- {
- usao1 = true;
- }
- else
- {
- Console.WriteLine("{0} je napustio supermarket, jer je red previse dug.", Thread.CurrentThread.Name);
- }
- }
- else if (red1 > red2 || red3 > red2 || red4 > red2)
- {
- if (red2 < 3)
- {
- usao2 = true;
- }
- else
- {
- Console.WriteLine("{0} je napustio supermarket, jer je red previse dug.", Thread.CurrentThread.Name);
- }
- }
- else if (red1 > red3 || red2 > red3 || red4 > red3)
- {
- if (red3 < 3)
- {
- usao3 = true;
- }
- else
- {
- Console.WriteLine("{0} je napustio supermarket, jer je red previse dug.", Thread.CurrentThread.Name);
- }
- }
- else if (red1 > red4 || red3 > red4 || red2 > red4)
- {
- if (red4 < 3)
- {
- usao4 = true;
- }
- else
- {
- Console.WriteLine("{0} je napustio supermarket, jer je red previse dug.", Thread.CurrentThread.Name);
- }
- }
- }
- else //moze birati 2 prva reda
- {
- if (red1 > red2)
- {
- if (red2 < 3)
- {
- usao2 = true;
- }
- else
- {
- Console.WriteLine("{0} je napustio market jer je red previse dug", Thread.CurrentThread.Name);
- }
- }
- else
- {
- if (red1 < 3)
- {
- usao1 = true;
- }
- else
- {
- Console.WriteLine("{0} je napustio market jer je red previse dug", Thread.CurrentThread.Name);
- }
- }
- }
- }
- if (usao1)
- {
- lock (katanac)
- {
- red1++;
- Console.WriteLine("{0} je usao u prvi red, gdje trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red1);
- usao1 = false;
- }
- regKasa1.Wait();
- lock (katanac)
- {
- Console.WriteLine("{0} se opsluzuje na prvoj kasi.", Thread.CurrentThread.Name);
- red1--;
- }
- Thread.Sleep(vrijemeOpsluzivanja * brojArtikala);
- Console.WriteLine("{0} napusta prvu kasu.", Thread.CurrentThread.Name);
- lock (katanac)
- {
- regKasa1.Release();
- }
- }
- if (usao2)
- {
- lock (katanac)
- {
- red2++;
- Console.WriteLine("{0} je usao u drugi red, gdje trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red2);
- usao2 = false;
- }
- regKasa2.Wait();
- lock (katanac)
- {
- Console.WriteLine("{0} se opsluzuje na drugoj kasi.", Thread.CurrentThread.Name);
- red2--;
- }
- Thread.Sleep(vrijemeOpsluzivanja * brojArtikala);
- Console.WriteLine("{0} napusta drugu kasu.", Thread.CurrentThread.Name);
- lock (katanac)
- {
- regKasa2.Release();
- }
- }
- if (usao3)
- {
- lock (katanac)
- {
- red3++;
- Console.WriteLine("{0} je usao u treci red, gdje trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red3);
- usao3 = false;
- }
- brzaKasa1.Wait();
- lock (katanac)
- {
- Console.WriteLine("{0} se opsluzuje na trecoj kasi.", Thread.CurrentThread.Name);
- red3--;
- }
- Thread.Sleep(vrijemeOpsluzivanja * brojArtikala);
- Console.WriteLine("{0} napusta trecu kasu.", Thread.CurrentThread.Name);
- lock (katanac)
- {
- brzaKasa1.Release();
- }
- }
- if (usao4)
- {
- lock (katanac)
- {
- red4++;
- Console.WriteLine("{0} je usao u cetvrti red, gdje trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red4);
- usao4 = false;
- }
- brzaKasa2.Wait();
- lock (katanac)
- {
- Console.WriteLine("{0} se opsluzuje na cetvrtoj kasi.", Thread.CurrentThread.Name);
- red4--;
- }
- Thread.Sleep(vrijemeOpsluzivanja * brojArtikala);
- Console.WriteLine("{0} napusta cetvrtu kasu.", Thread.CurrentThread.Name);
- lock (katanac)
- {
- brzaKasa2.Release();
- }
- }
- }
- static void Main(string[] args)
- {
- Thread[] threads = new Thread[100];
- for (int i = 0; i < threads.Length; i++)
- {
- threads[i] = new Thread(UlazakURed);
- 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