Vrtuljak

Zadatak

Modelirati vrtuljak (ringišpil) s dva tipa procesa: procesima posjetitelj (koje predstavljaju posjetitelje koji žele na vožnju) te jednim procesom vrtuljak. Procesima posjetitelj se ne smije dozvoliti ukrcati na vrtuljak kada više nema praznih mjesta te prije nego li svi prethodni posjetitelji siđu. Vrtuljak ima ukupno 4 mjesta i može se pokrenuti tek kada je pun. Na početku proces vrtuljak stvara 12 procesa posjetitelja i svaki od tih 12 procesa zaželi se 2 puta voziti na vrtuljku.

Ispravno sinkronizirati 12 procesa posjetitelja i jednog procesa vrtuljak koristeći protokol Ricarta i Agrawala.

Simulirati raspodijeljeni sustav koristeći procese, a za komunikaciju između procesa koristiti cjevovode.

Svi procesi ispisuju poruku koju šalju i poruku koju primaju.

Sve što u zadatku nije zadano, riješiti na proizvoljan način.

 

Dretva posjetitelj(K) {

   ponavljaj 2 puta{

      spavaj X milisekundi; // X je slučajan broj između 100 i 2000

      pošalji vrtuljku poruku "Želim se voziti";

      po primitku poruke "Sjedi" sjedni, ispiši "Sjeo posjetitelj K" i čekaj;

      po primitku poruke "Ustani" ustani, siđi i ispiši "Sišao posjetitelj K";

   }

   ispiši i pošalji poruku vrtuljku "Posjetitelj K završio."

}

 

Dretva vrtuljak() {

   dok ima posjetitelja {

      čekaj posjetitelje da zažele vožnju {

          čekaj 4 poruke "Želim se voziti";

          odgovori na svaku poruku porukom "Sjedi";

      }

      pokreni vrtuljak i ispiši "Pokrenuo vrtuljak";

      spavaj X milisekundi; // X je slučajan broj između 1000 i 3000

      zaustavi vrtuljak i ispiši "Vrtuljak zaustavljen";
      pošalji posjetiteljima na vrtuljku poruku "Ustani"

   }

}