Advertisement
Guest User

Untitled

a guest
May 24th, 2015
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. /*
  2. * Created by SharpDevelop.
  3. * User: Rza
  4. * Date: 24-May-15
  5. * Time: 8:56 PM
  6. *
  7. * To change this template use Tools | Options | Coding | Edit Standard Headers.
  8. */
  9. using System;
  10. using System.Threading;
  11.  
  12.  
  13. namespace supermarket
  14. {
  15. /// <summary>
  16. /// Description of Supermarket.
  17. /// </summary>
  18. class Supermarket
  19. {
  20.  
  21. private SemaphoreSlim semaforKase1 = new SemaphoreSlim(1);
  22. private SemaphoreSlim semaforKase2 = new SemaphoreSlim(1);
  23.  
  24. private int red1;
  25. private int red2;
  26.  
  27. private object objekat;
  28.  
  29. private int vremeNaKasi;
  30.  
  31. public Supermarket(int vremeNaKasi)
  32. {
  33. this.vremeNaKasi = vremeNaKasi;
  34. objekat = new object();
  35. red1 = 0;
  36. red2 = 0;
  37. }
  38. public void dolazakNaKasu()
  39. {
  40. string trenutniKupac = Thread.CurrentThread.Name;
  41. Console.WriteLine("{0}. kupac zeli da stane u red.", trenutniKupac);
  42. bool uRedu1 = false;
  43. bool uRedu2 = false;
  44.  
  45. lock (objekat)
  46. {
  47. if (red1 > red2)
  48. {
  49. uRedu1 = true;
  50. }
  51. else
  52. {
  53. uRedu2 = true;
  54. }
  55. if (uRedu1 == true)
  56. {
  57. lock (objekat)
  58. {
  59. red1++;
  60. Console.WriteLine("{0} kupac je usao u prvi red.", trenutniKupac);
  61. uRedu1 = false;
  62. }
  63. semaforKase1.Wait();
  64. lock (objekat)
  65. {
  66. Console.WriteLine("{0} se nalazi na kasi 1", trenutniKupac);
  67. red1 --;
  68. }
  69. Thread.Sleep(vremeNaKasi);
  70. Console.WriteLine("{0} odlazi iz supermarketa", trenutniKupac);
  71. lock (objekat)
  72. {
  73. semaforKase1.Release();
  74. }
  75. }
  76.  
  77. if (uRedu2 == true)
  78. {
  79. lock (objekat)
  80. {
  81. red2++;
  82. Console.WriteLine("{0} kupac je usao u drugi red", trenutniKupac);
  83. uRedu2 = false;
  84. }
  85. semaforKase2.Wait();
  86. lock(objekat)
  87. {
  88. Console.WriteLine("{0} se nalazi na kasi 2", trenutniKupac);
  89. red2 --;
  90. }
  91. Thread.Sleep(vremeNaKasi);
  92. Console.WriteLine("{0} odlazi iz supermarketa", trenutniKupac);
  93. lock(objekat)
  94. {
  95. semaforKase2.Release();
  96. }
  97. }
  98.  
  99.  
  100. }
  101. }
  102.  
  103. }
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement