Advertisement
ivana_andreevska

Sinhronizacija Primer Zadaci 2

Aug 19th, 2022 (edited)
1,129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.92 KB | None | 0 0
  1. package AV3ZADACI;
  2.  
  3. import java.util.concurrent.Semaphore;
  4.  
  5. public class SiO2 {
  6.     public static int NUM_RUN = 50;
  7.     static Semaphore si; //semafor za sicilium
  8.     static Semaphore o; // semafor za kislorod
  9.     static Semaphore siHere; //semafor koj najavuva prisustvo na sicilium
  10.     static Semaphore oHere; //semafor koj najavuva priustvo na kislorod
  11.     static Semaphore ready;
  12.  
  13.     public static void init() {
  14.         //inicijalizacija na semaforite
  15.         si = new Semaphore(1); //inicijalna vrednost ima 1 oti treba da zeme 1 atom od sicilium
  16.         o = new Semaphore(2); //2 permisii oti ima 2 atomi kislorod
  17.         siHere = new Semaphore(0);
  18.         oHere = new Semaphore(0);
  19.         ready = new Semaphore(0);
  20.         //dr semafori nemaat permisii oti tie se aktiviraat vo dr scenario
  21.     }
  22.  
  23.     public static class Si extends Thread {
  24.         public void bond() {
  25.             System.out.println("Si is bonding now");
  26.         }
  27.  
  28.         public void run() {
  29.             for (int i = 0; i < NUM_RUN; i++) {
  30.                 try {
  31.                     execute();
  32.                 } catch (InterruptedException e) {
  33.                     e.printStackTrace();
  34.                 }
  35.             }
  36.         }
  37.  
  38.         public void execute() throws InterruptedException {
  39.             //koga se startuva klasa si mora da se dobie prvo notifikacija od semaforot si
  40.             si.acquire();
  41.             //sleden semafor e siHere
  42.             //siHere.release();
  43.             //oslobduvame i prakame poraka so siHere
  44.             //siHere.release();
  45.             //pravime 2 releasese za dvata posebni releasese na 2 atoma kislorod no moze da se skrati ova so
  46.             siHere.release(2);
  47.             oHere.release(2);
  48.             //ohere ne izvestuva za dali e pristinat nekoj atom i go ktivirame
  49.             //cekame 2 pati da dobieme poraka za 2 atoma
  50.             ready.release(2);
  51.             //2 poraki za 2 atoma na kislorod
  52.             bond();
  53.             si.release(); //sme zavrsile so implementacija na si i gi oslobudvame resusite
  54.         }
  55.     }
  56.  
  57.     public static class O extends Thread {
  58.         public void execute() throws InterruptedException {
  59.         //cekame prvo notifikacija za da se izvlece eden atom od kislirod
  60.             o.acquire(1); //cekame 1 dozvola od si za da prodolzime natamu
  61.             siHere.acquire(1); //precekuvame atom od si
  62.             oHere.release();
  63.             ready.acquire(); //signal od strana na koordinator na sicilium za da pocneme so povik bond
  64.             bond();
  65.             o.release();
  66.         }
  67.  
  68.         public void bond() {
  69.             System.out.println("O is bonding now");
  70.         }
  71.  
  72.         public void run() {
  73.             for (int i = 0; i < NUM_RUN; i++) {
  74.                 try {
  75.                     execute();
  76.                 } catch (InterruptedException e) {
  77.                     e.printStackTrace();
  78.                 }
  79.             }
  80.         }
  81.     }
  82. }
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement