Advertisement
miljdze

Untitled

Jun 4th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.58 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Threading;
  7.  
  8. namespace LASTTRYTODAY
  9. {
  10. class Program
  11. {
  12. public static SemaphoreSlim regKasa1 = new SemaphoreSlim(1);
  13. public static SemaphoreSlim regKasa2 = new SemaphoreSlim(1);
  14. public static SemaphoreSlim brzaKasa1 = new SemaphoreSlim(1);
  15. public static SemaphoreSlim brzaKasa2 = new SemaphoreSlim(1);
  16.  
  17. public static int vrijemeOpsluzivanja = 150;
  18. public static object katanac = new Object();
  19. public static int brojArtikala = 0;
  20. public static Random r = new Random();
  21. public static int red1 = 0, red2 = 0, red3 = 0, red4 = 0;
  22. public static bool usao1 = false, usao2 = false, usao3 = false, usao4 = false;
  23.  
  24. public static void UlazakURed()
  25. {
  26. brojArtikala = 6;
  27. lock (katanac)
  28. {
  29. if (brojArtikala <= 5) // mozebirati sve redove
  30. {
  31. if (red2 > red1 || red3 > red1 || red4 > red1)
  32. {
  33. if (red1 < 3)
  34. {
  35. usao1 = true;
  36. }
  37. else
  38. {
  39. Console.WriteLine("{0} je napustio supermarket, jer je red previse dug.", Thread.CurrentThread.Name);
  40. }
  41. }
  42. else if (red1 > red2 || red3 > red2 || red4 > red2)
  43. {
  44. if (red2 < 3)
  45. {
  46. usao2 = true;
  47. }
  48. else
  49. {
  50. Console.WriteLine("{0} je napustio supermarket, jer je red previse dug.", Thread.CurrentThread.Name);
  51. }
  52. }
  53. else if (red1 > red3 || red2 > red3 || red4 > red3)
  54. {
  55. if (red3 < 3)
  56. {
  57. usao3 = true;
  58. }
  59. else
  60. {
  61. Console.WriteLine("{0} je napustio supermarket, jer je red previse dug.", Thread.CurrentThread.Name);
  62. }
  63. }
  64. else if (red1 > red4 || red3 > red4 || red2 > red4)
  65. {
  66. if (red4 < 3)
  67. {
  68. usao4 = true;
  69. }
  70. else
  71. {
  72. Console.WriteLine("{0} je napustio supermarket, jer je red previse dug.", Thread.CurrentThread.Name);
  73. }
  74. }
  75.  
  76. }
  77. else //moze birati 2 prva reda
  78. {
  79. if (red1 > red2)
  80. {
  81. if (red2 < 3)
  82. {
  83. usao2 = true;
  84. }
  85. else
  86. {
  87. Console.WriteLine("{0} je napustio market jer je red previse dug", Thread.CurrentThread.Name);
  88. }
  89. }
  90. else
  91. {
  92. if (red1 < 3)
  93. {
  94. usao1 = true;
  95. }
  96. else
  97. {
  98. Console.WriteLine("{0} je napustio market jer je red previse dug", Thread.CurrentThread.Name);
  99. }
  100. }
  101. }
  102. }
  103.  
  104. if (usao1)
  105. {
  106. lock (katanac)
  107. {
  108. red1++;
  109. Console.WriteLine("{0} je usao u prvi red, gdje trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red1);
  110. usao1 = false;
  111. }
  112. regKasa1.Wait();
  113. lock (katanac)
  114. {
  115. Console.WriteLine("{0} se opsluzuje na prvoj kasi.", Thread.CurrentThread.Name);
  116. red1--;
  117. }
  118. Thread.Sleep(vrijemeOpsluzivanja * brojArtikala);
  119. Console.WriteLine("{0} napusta prvu kasu.", Thread.CurrentThread.Name);
  120. lock (katanac)
  121. {
  122. regKasa1.Release();
  123. }
  124.  
  125.  
  126. }
  127. if (usao2)
  128. {
  129. lock (katanac)
  130. {
  131. red2++;
  132. Console.WriteLine("{0} je usao u drugi red, gdje trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red2);
  133. usao2 = false;
  134. }
  135. regKasa2.Wait();
  136. lock (katanac)
  137. {
  138. Console.WriteLine("{0} se opsluzuje na drugoj kasi.", Thread.CurrentThread.Name);
  139. red2--;
  140. }
  141. Thread.Sleep(vrijemeOpsluzivanja * brojArtikala);
  142. Console.WriteLine("{0} napusta drugu kasu.", Thread.CurrentThread.Name);
  143. lock (katanac)
  144. {
  145. regKasa2.Release();
  146. }
  147.  
  148. }
  149. if (usao3)
  150. {
  151. lock (katanac)
  152. {
  153. red3++;
  154. Console.WriteLine("{0} je usao u treci red, gdje trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red3);
  155. usao3 = false;
  156. }
  157. brzaKasa1.Wait();
  158. lock (katanac)
  159. {
  160. Console.WriteLine("{0} se opsluzuje na trecoj kasi.", Thread.CurrentThread.Name);
  161. red3--;
  162. }
  163. Thread.Sleep(vrijemeOpsluzivanja * brojArtikala);
  164. Console.WriteLine("{0} napusta trecu kasu.", Thread.CurrentThread.Name);
  165. lock (katanac)
  166. {
  167. brzaKasa1.Release();
  168. }
  169. }
  170. if (usao4)
  171. {
  172. lock (katanac)
  173. {
  174. red4++;
  175. Console.WriteLine("{0} je usao u cetvrti red, gdje trenutno ima {1} ljudi.", Thread.CurrentThread.Name, red4);
  176. usao4 = false;
  177. }
  178. brzaKasa2.Wait();
  179. lock (katanac)
  180. {
  181. Console.WriteLine("{0} se opsluzuje na cetvrtoj kasi.", Thread.CurrentThread.Name);
  182. red4--;
  183. }
  184. Thread.Sleep(vrijemeOpsluzivanja * brojArtikala);
  185. Console.WriteLine("{0} napusta cetvrtu kasu.", Thread.CurrentThread.Name);
  186. lock (katanac)
  187. {
  188. brzaKasa2.Release();
  189. }
  190. }
  191.  
  192. }
  193. static void Main(string[] args)
  194. {
  195. Thread[] threads = new Thread[100];
  196. for (int i = 0; i < threads.Length; i++)
  197. {
  198. threads[i] = new Thread(UlazakURed);
  199. threads[i].Name = string.Format("Kupac #{0}", i + 1);
  200. threads[i].Start();
  201. }
  202. for (int i = 0; i < threads.Length; i++)
  203. {
  204. threads[i].Join();
  205. }
  206.  
  207. }
  208. }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement