Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.63 KB | None | 0 0
  1.  
  2. import os.simulation.Application;
  3. import os.simulation.AutoCreate;
  4. import os.simulation.Container;
  5. import os.simulation.Item;
  6. import os.simulation.Operation;
  7. import os.simulation.Thread;
  8.  
  9. /*
  10. * U okviru maturske ekskurzije, za djake iz tri evropske drzave - Engleske,
  11. * Nemacke i Italije - je organizovan obilazak muzeja Louvre u Parizu. Sve tri
  12. * grupe djaka borave neko vreme ispred muzeja, nakon cega ulaze u muzej i uzi-
  13. * vaju u izlozenim umetnickim delima. Medjutim, u jednom momentu samo djaci
  14. * jedne drzave mogu boraviti u muzeju, jer bi se u suprotnom njihovi vodici
  15. * morali nadvikivati i niko nista ne bi cuo.
  16. *
  17. * Sinhronizovati boravak djaka u muzeju koriscenjem semafora, tako da u jednom
  18. * momentu samo jedna grupa bude unutar muzeja. Svaki djak je predstavljen jed-
  19. * nom niti cija klasa odredjuje drzavu iz koje on dolazi.
  20. */
  21.  
  22. class MuzejSinh {
  23. int brojacEngleza = 0;
  24. int brojacNemaca = 0;
  25. int brojacItalijana = 0;
  26.  
  27.  
  28. }
  29.  
  30. public class Muzej extends Application {
  31.  
  32. final MuzejSinh objMuzej = new MuzejSinh();
  33.  
  34. @AutoCreate(8)
  35. protected class Englez extends Thread {
  36.  
  37. @Override
  38. protected void step() {
  39. odmara();
  40. // Sinhronizacija
  41. try {
  42. synchronized (objMuzej) {
  43. while (objMuzej.brojacItalijana > 0 || objMuzej.brojacNemaca > 0) {
  44. objMuzej.wait();
  45. }
  46. objMuzej.brojacEngleza++;
  47. }
  48. } catch (InterruptedException e) {
  49.  
  50. }
  51. obilazi();
  52. // Sinhronizacija
  53. synchronized (objMuzej) {
  54. objMuzej.brojacEngleza--;
  55. if (objMuzej.brojacEngleza == 0) {
  56. objMuzej.notifyAll();
  57. }
  58. }
  59. }
  60. }
  61.  
  62.  
  63.  
  64. @AutoCreate(8)
  65. protected class Italijan extends Thread {
  66.  
  67. @Override
  68. protected void step() {
  69. odmara();
  70. // Sinhronizacija
  71. try {
  72. synchronized (objMuzej) {
  73. while (objMuzej.brojacNemaca > 0 || objMuzej.brojacEngleza > 0) {
  74. objMuzej.wait();
  75. }
  76. objMuzej.brojacItalijana++;
  77. }
  78. } catch (InterruptedException e) {
  79.  
  80. }
  81. obilazi();
  82. // Sinhronizacija
  83. synchronized (objMuzej) {
  84. objMuzej.brojacItalijana--;
  85. if (objMuzej.brojacItalijana == 0) {
  86. objMuzej.notifyAll();
  87. }
  88. }
  89. }
  90. }
  91.  
  92. @AutoCreate(8)
  93. protected class Nemac extends Thread {
  94.  
  95. @Override
  96. protected void step() {
  97. odmara();
  98. // Sinhronizacija
  99. try {
  100. synchronized (objMuzej) {
  101. while (objMuzej.brojacItalijana > 0 || objMuzej.brojacEngleza > 0) {
  102. objMuzej.wait();
  103. }
  104. objMuzej.brojacNemaca++;
  105. }
  106. } catch (InterruptedException e) {
  107.  
  108. }
  109. obilazi();
  110. // Sinhronizacija
  111. synchronized (objMuzej) {
  112. objMuzej.brojacNemaca--;
  113. if (objMuzej.brojacNemaca == 0) {
  114. objMuzej.notifyAll();
  115. }
  116. }
  117. }
  118. }
  119.  
  120. // ------------------- //
  121. // Sistemski deo //
  122. // ------------------- //
  123. // Ne dirati kod ispod //
  124. // ------------------- //
  125.  
  126. protected final Container englezi = box("Енглези").color(MAROON);
  127. protected final Container nemci = box("Немци").color(ROYAL);
  128. protected final Container italijani = box("Италијани").color(ARMY);
  129. protected final Container muzej = box("Музеј").color(NAVY);
  130. protected final Container main = column(row(englezi, nemci, italijani), muzej);
  131. protected final Operation nemac = init().container(nemci).name("Немац %d").color(PURPLE);
  132. protected final Operation italijan = init().container(italijani).name("Италијан %d").color(GREEN);
  133. protected final Operation englez = init().container(englezi).name("Енглез %d").color(RED);
  134.  
  135.  
  136. protected final Operation odmaranje = duration("7±2").text("Одмара").textAfter("Чека");
  137. protected final Operation obilazak = duration("5±2").text("Обилази").container(muzej).textAfter("Обишао").update(this::azuriraj);
  138.  
  139. protected void odmara() {
  140. odmaranje.performUninterruptibly();
  141. }
  142.  
  143. protected void obilazi() {
  144. obilazak.performUninterruptibly();
  145. }
  146.  
  147. protected void azuriraj(Item item) {
  148. long brE = muzej.stream(Englez.class).count();
  149. long brN = muzej.stream(Nemac.class).count();
  150. long brI = muzej.stream(Italijan.class).count();
  151. muzej.setText(String.format("%d / %d / %d", brE, brN, brI));
  152. if (brE == 0 && brN == 0 && brI == 0) {
  153. muzej.setColor(NAVY);
  154. } else if (brE > 0 && brN == 0 && brI == 0) {
  155. muzej.setColor(MAROON);
  156. } else if (brE == 0 && brN > 0 && brI == 0) {
  157. muzej.setColor(ROYAL);
  158. } else if (brE == 0 && brN == 0 && brI > 0) {
  159. muzej.setColor(ARMY);
  160. } else {
  161. muzej.setColor(CARBON);
  162. }
  163. }
  164.  
  165. @Override
  166. protected void initialize() {
  167. azuriraj(null);
  168. }
  169.  
  170. public static void main(String[] a) {
  171. launch("Музеј");
  172. }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement