Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. package mk.ukim.finki.os.synchronization.exam14.march;
  2.  
  3. import java.util.Date;
  4. import java.util.HashSet;
  5. import java.util.Scanner;
  6. import java.util.concurrent.Semaphore;
  7.  
  8. import mk.ukim.finki.os.synchronization.ProblemExecution;
  9. import mk.ukim.finki.os.synchronization.TemplateThread;
  10.  
  11. public class CalciumNitride {
  12.  
  13. static int numCal;
  14. static Semaphore numIncCal;
  15. static Semaphore Calcium;
  16. static Semaphore Nitrogen;
  17. static Semaphore calHere;
  18. static Semaphore nitHere;
  19. static Semaphore bond;
  20. static Semaphore validate;
  21. static Semaphore done;
  22.  
  23.  
  24. public static void init() {
  25. numCal = 0;
  26. numIncCal = new Semaphore(1);
  27. Calcium = new Semaphore(3);
  28. Nitrogen = new Semaphore(2);
  29. calHere = new Semaphore(0);
  30. nitHere = new Semaphore(0);
  31. bond = new Semaphore(0);
  32. validate = new Semaphore(0);
  33. done = new Semaphore(0);
  34. }
  35.  
  36. public static class Calcium extends TemplateThread {
  37.  
  38. public Calcium(int numRuns) {
  39. super(numRuns);
  40. }
  41.  
  42. @Override
  43. public void execute() throws InterruptedException {
  44.  
  45. Calcium.acquire();
  46. numIncCal.acquire();
  47.  
  48. if(numCal == 0){
  49. numCal++;
  50. numIncCal.release();
  51.  
  52. calHere.acquire(2);
  53. nitHere.acquire(2);
  54. bond.release(4);
  55. state.bond();
  56.  
  57. validate.acquire(4);
  58. state.validate();
  59.  
  60. numCal = 0;
  61.  
  62. done.release(4);
  63.  
  64. }else{
  65. numCal++;
  66. numIncCal.release();
  67. calHere.release();
  68. bond.acquire();
  69. state.bond();
  70. validate.release();
  71. done.acquire();
  72. }
  73. Calcium.release();
  74. }
  75. }
  76.  
  77. public static class Nitrogen extends TemplateThread {
  78.  
  79. public Nitrogen(int numRuns) {
  80. super(numRuns);
  81. }
  82.  
  83. @Override
  84. public void execute() throws InterruptedException {
  85. Nitrogen.acquire();
  86. nitHere.release();
  87. bond.acquire();
  88. state.bond();
  89. validate.release();
  90. done.acquire();
  91. Nitrogen.release();
  92. }
  93. }
  94. static CalciumNitrideState state = new CalciumNitrideState();
  95.  
  96. public static void main(String[] args) {
  97. for (int i = 0; i < 10; i++) {
  98. run();
  99. }
  100. }
  101.  
  102. public static void run() {
  103. try {
  104. Scanner s = new Scanner(System.in);
  105. int numRuns = 1;
  106. int numIterations = 100;
  107. s.close();
  108.  
  109. HashSet<Thread> threads = new HashSet<Thread>();
  110.  
  111. for (int i = 0; i < numIterations; i++) {
  112. Nitrogen n = new Nitrogen(numRuns);
  113. threads.add(n);
  114. Calcium ca = new Calcium(numRuns);
  115. threads.add(ca);
  116. ca = new Calcium(numRuns);
  117. threads.add(ca);
  118. n = new Nitrogen(numRuns);
  119. threads.add(n);
  120. ca = new Calcium(numRuns);
  121. threads.add(ca);
  122. }
  123.  
  124. init();
  125.  
  126. ProblemExecution.start(threads, state);
  127. System.out.println(new Date().getTime());
  128. } catch (Exception ex) {
  129. ex.printStackTrace();
  130. }
  131. }
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement