SHARE
TWEET

predomaci

petar74 Jun 1st, 2020 1,444 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Threading;
  3. using System.Diagnostics;
  4. //using System.IO;
  5. //using System.Collections.Generic;
  6. //using System.Linq;
  7. //using System.Runtime.InteropServices;
  8. //using System.Text;
  9. //using System.Threading.Tasks;
  10.  
  11.  
  12. namespace basic
  13. {
  14.     class prog
  15.     {
  16.         //? true : false
  17.         //private static variable value;
  18.         //static function function_name() {}
  19.         //DateTime.Now.Hour
  20.         //DateTime.Now.Minute
  21.         //DateTime.Now.Second
  22.         //Thread.CurrentThread.Name|IsBackground|IsAlive|Priority|ThreadState
  23.         //Thread.Sleep(); new ThreadStart()
  24.         //Thread[] t = new Thread[]; new Thread(function_name).Start();
  25.         //t[i].Start(); t[i].Join(); t[i].Name = "Radnik " + (i + 1); t[i] = new Thread(() => rad(i));
  26.         //char[] chr = str.ToCharArray();
  27.         //str = File.ReadAllText(fajl);
  28.         //Math.Round(); Math.Sqrt(); Math.Pow(); vraca double
  29.  
  30.         //private static object name = new Object();
  31.         /*
  32.          lock(object_name)
  33.          {
  34.             Monitor.Pulse(object_name)
  35.             Monitor.Wait(object_name, time|Timeout.Infinite)
  36.             samo jedna nit moze da udje
  37.          }
  38.          */
  39.  
  40.         //private static Semaphore smp;
  41.         /*
  42.          smp = new Semaphore (slots, how_much_to_occupy);
  43.          smp.WaitOne()|Wait(value);
  44.          smp.Release(how_much_to_release);
  45.          */
  46.  
  47.         //Stopwatch name = new Stopwatch();
  48.         //stopwatch_name.Start()
  49.         //stopwatch_name.Stop()
  50.         //stopwatch_name.ElapsedTicks.ToString()
  51.         //stopwatch_name.Reset()
  52.         //TimeSpan name = stopwatch_name.Elapsed;
  53.         //timespan_name.Seconds|Minutes|Hours|Milliseconds
  54.  
  55.         private static int klijent;
  56.         private static bool[] nizs1 = new bool[3];
  57.         private static bool[] nizs2 = new bool[3];
  58.         private static bool[] nizs3 = new bool[3];
  59.         private static bool[] nizb = new bool[15];
  60.         private static Thread[] tt = new Thread[15];
  61.         private static int[] uplatnica = new int[15];
  62.         private static int uplatnice;
  63.  
  64.         private static Stopwatch w = new Stopwatch();
  65.         private static TimeSpan ww;
  66.  
  67.         private static Semaphore smp1;
  68.         private static Semaphore smp2;
  69.         private static Semaphore smp3;
  70.  
  71.         private static Random r;
  72.  
  73.         static void Klijenti()
  74.         {
  75.             w.Start();
  76.             while (true)
  77.             {
  78.                 ww = w.Elapsed;
  79.                 if (ww.Seconds >= 17)
  80.                     break;
  81.                 for (int i = 0; i < 15; i++)
  82.                 {
  83.                     if (nizb[i] == false)
  84.                     {
  85.                         Thread.Sleep(70);
  86.                         klijent++;
  87.                         tt[i] = new Thread(() => Banka(klijent, i));
  88.                         tt[i].Name = "Klijent" + klijent;
  89.                         Console.WriteLine("Klijent {0} je usao na mesto {1}.", klijent, i + 1);
  90.                         nizb[i] = true;
  91.                         tt[i].Start();
  92.                         break;
  93.                     }
  94.                 }
  95.             }
  96.             w.Stop();
  97.         }
  98.  
  99.         static void Banka(int br1, int br2)
  100.         {
  101.             r = new Random();
  102.             bool pom = false;
  103.             uplatnica[br2] = r.Next(1,6);
  104.             Console.WriteLine("Klijent {0} na mesto {1} ima {2} uplatnice.", br1, br2 + 1, uplatnica[br2]);
  105.             while (!pom)
  106.             {
  107.                 switch (uplatnica[br2])
  108.                 {
  109.                     case 1:
  110.                     case 2:
  111.                     case 3:
  112.                         for (int n = 0; n < 3; n++)
  113.                             if (nizs1[n] == false)
  114.                             {
  115.                                 Salter1(br1, br2);
  116.                                 pom = true;
  117.                             }
  118.                             else if (n == 2)
  119.                             {
  120.                                 for (int m = 0; m < 3; m++)
  121.                                     if (nizs2[m] == false)
  122.                                     {
  123.                                         Salter2(br1, br2);
  124.                                         pom = true;
  125.                                     }
  126.  
  127.                             }
  128.                     break;
  129.  
  130.                     case 4:
  131.                     case 5:
  132.                         for (int n = 0; n < 3; n++)
  133.                             if (nizs3[n] == false)
  134.                             {
  135.                                 Salter3(br1, br2);
  136.                                 pom = true;
  137.                             }
  138.                     break;
  139.  
  140.                     default:
  141.                         Console.WriteLine("Klijent {0} na mesto {1} ceka.", br1, br2 + 1);
  142.                     break;
  143.                 }
  144.             }
  145.             Console.WriteLine("Klijent {0} na mesto {1} je izasao.", br1, br2 + 1);
  146.             nizb[br2] = false;
  147.         }
  148.  
  149.         static void Salter1(int br1, int br2)
  150.         {
  151.             smp1.WaitOne();
  152.             Thread.Sleep(40 * uplatnica[br2]);
  153.             uplatnice += uplatnica[br2];
  154.             smp1.Release(1);
  155.         }
  156.  
  157.         static void Salter2(int br1, int br2)
  158.         {
  159.             smp2.WaitOne();
  160.             Thread.Sleep(40 * uplatnica[br2]);
  161.             uplatnice += uplatnica[br2];
  162.             smp2.Release(1);
  163.         }
  164.  
  165.         static void Salter3(int br1, int br2)
  166.         {
  167.             smp2.WaitOne();
  168.             Thread.Sleep(40 * uplatnica[br2]);
  169.             uplatnice += uplatnica[br2];
  170.             smp2.Release(1);
  171.         }
  172.  
  173.         static void Kraj()
  174.         {
  175.             Thread.Sleep(1000);
  176.             Console.WriteLine("{0} klijenata = {1} uplatnica.", klijent, uplatnice);
  177.         }
  178.  
  179.         static void Main()
  180.         {
  181.             Console.WriteLine("Hello World!");
  182.  
  183.             klijent = 0;
  184.             uplatnice = 0;
  185.             for (int i = 0; i < 15; i++)
  186.                 nizb[i] = false;
  187.             for (int i = 0; i < 3; i++)
  188.             {
  189.                 nizs1[i] = false;
  190.                 nizs2[i] = false;
  191.                 nizs3[i] = false;
  192.             }
  193.  
  194.             smp1 = new Semaphore(3, 3);
  195.             smp2 = new Semaphore(3, 3);
  196.             smp3 = new Semaphore(3, 3);
  197.  
  198.             Thread t = new Thread(Klijenti);
  199.             t.Name = "Klijenti";
  200.             t.Start();
  201.             t.Join();
  202.  
  203.             t = new Thread(Kraj);
  204.             t.Name = "Kraj";
  205.             t.Start();
  206.             t.Join();
  207.  
  208.             Console.ReadKey();
  209.         }
  210.     }
  211. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top