Advertisement
miljdze

Untitled

Jun 4th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.62 KB | None | 0 0
  1. namespace SimulacijaThreading2015
  2. {
  3. class Program
  4. {
  5. public static SemaphoreSlim regKasa1 = new SemaphoreSlim(1);
  6. public static SemaphoreSlim regKasa2 = new SemaphoreSlim(1);
  7. public static SemaphoreSlim brzaKasa1 = new SemaphoreSlim(1);
  8. public static SemaphoreSlim brzaKasa2 = new SemaphoreSlim(1);
  9.  
  10. public static object katanac = new Object();
  11. public static int red1 = 0, red2 = 0, red3 = 0, red4 = 0;
  12. public static int brojArtikala = 0;
  13. public static Random r = new Random();
  14. public bool zatvoreno = false;
  15.  
  16. public static void usaoPrvi()
  17. {
  18. lock (katanac)
  19. {
  20. red1++;
  21. Console.WriteLine("{0} ceka da udje u prvi red i trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red1);
  22. }
  23. regKasa1.Wait();
  24. lock (katanac)
  25. {
  26. Console.WriteLine("{0} se opsluzuje na prvoj kasi", Thread.CurrentThread.Name);
  27. red1--;
  28. }
  29. Thread.Sleep(150 * brojArtikala);
  30. Console.WriteLine("{0} je zavrsio kupovinu i napusta supermarket.", Thread.CurrentThread.Name);
  31. lock (katanac)
  32. {
  33. regKasa1.Release();
  34. }
  35. }
  36. public static void usaoDrugi()
  37. {
  38. lock (katanac)
  39. {
  40. red2++;
  41. Console.WriteLine("{0} ceka da udje u drugi red i trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red2);
  42. }
  43. regKasa2.Wait();
  44. lock (katanac)
  45. {
  46. Console.WriteLine("{0} se opsluzuje na prvoj kasi", Thread.CurrentThread.Name);
  47. red2--;
  48. }
  49. Thread.Sleep(150 * brojArtikala);
  50. Console.WriteLine("{0} je zavrsio kupovinu i napusta supermarket.", Thread.CurrentThread.Name);
  51. lock (katanac)
  52. {
  53. regKasa2.Release();
  54. }
  55. }
  56. public static void usaoTreci()
  57. {
  58. lock (katanac)
  59. {
  60. red3++;
  61. Console.WriteLine("{0} ceka da udje u prvi red i trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red3);
  62. }
  63. brzaKasa1.Wait();
  64. lock (katanac)
  65. {
  66. Console.WriteLine("{0} se opsluzuje na prvoj kasi", Thread.CurrentThread.Name);
  67. red3--;
  68. }
  69. Thread.Sleep(150 * brojArtikala);
  70. Console.WriteLine("{0} je zavrsio kupovinu i napusta supermarket.", Thread.CurrentThread.Name);
  71. lock (katanac)
  72. {
  73. brzaKasa1.Release();
  74. }
  75. }
  76. public static void usaoCetvrti()
  77. {
  78. lock (katanac)
  79. {
  80. red4++;
  81. Console.WriteLine("{0} ceka da udje u prvi red i trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red4);
  82. }
  83. brzaKasa2.Wait();
  84. lock (katanac)
  85. {
  86. Console.WriteLine("{0} se opsluzuje na prvoj kasi", Thread.CurrentThread.Name);
  87. red4--;
  88. }
  89. Thread.Sleep(150 * brojArtikala);
  90. Console.WriteLine("{0} je zavrsio kupovinu i napusta supermarket.", Thread.CurrentThread.Name);
  91. lock (katanac)
  92. {
  93. brzaKasa2.Release();
  94. }
  95. }
  96. public static void Ulazak()
  97. {
  98. brojArtikala = r.Next(1, 10);
  99. if (brojArtikala <= 5)
  100. {
  101. //moze da bira jednu od 4 kase
  102. if (red1 < red2 && red1 < red3 && red1 < red4)
  103. {
  104. if (red1 > 3)
  105. {
  106. Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
  107. }
  108. else
  109. {
  110. usaoPrvi();
  111. }
  112. }
  113. if (red2 < red1 && red2 < red3 && red2 < red4)
  114. {
  115. if (red2 > 3)
  116. {
  117. Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
  118. }
  119. else
  120. {
  121. usaoDrugi();
  122. }
  123. }
  124. if (red3 < red1 && red3 < red2 && red3 < red4)
  125. {
  126. if (red3 > 3)
  127. {
  128. Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
  129. }
  130. else
  131. {
  132. usaoTreci();
  133. }
  134. }
  135. if (red4 < red3 && red4 < red2 && red4 < red1)
  136. {
  137. if (red4 > 3)
  138. {
  139. Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
  140. }
  141. else
  142. {
  143. usaoCetvrti();
  144. }
  145. }
  146. }
  147. else
  148. //moze da bira regularne 2 kase
  149. {
  150. if (red1 < red2)
  151. {
  152. if (red1 > 3)
  153. {
  154. Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
  155. }
  156. else
  157. {
  158. usaoPrvi();
  159. }
  160.  
  161. }
  162. if (red2 < red1)
  163. {
  164. if (red2 > 3)
  165. {
  166. Console.WriteLine("{0} predugo ceka u redu i napusta market", Thread.CurrentThread.Name);
  167. }
  168. else
  169. {
  170. usaoDrugi();
  171. }
  172. }
  173. }
  174. }
  175. static void Main(string[] args)
  176. {
  177. int brojKupaca = 20;
  178. Thread[] threads = new Thread[20];
  179. for (int i = 0; i < threads.Length; i++)
  180. {
  181. threads[i] = new Thread(Ulazak);
  182. threads[i].Name = string.Format("Kupac #{0}", i + 1);
  183. threads[i].Start();
  184. }
  185. for (int i = 0; i < threads.Length; i++)
  186. {
  187. threads[i].Join();
  188. }
  189.  
  190. }
  191. }
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement