KDP/Jul 2020
Postavka ovog roka može se naći sa stranice predmeta.
1. zadatak
- Ovaj zadatak nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.
Postavka
Koristeći raspodeljene binarne semafore i tehniku predaje štafetne palice rešiti problem čitalaca i pisaca (Readers - Writers Problem).
Rešenje
2. zadatak
Postavka
Problem izgradnje molekula vode (The H2O Problem). Napisati monitor sa signal and continue disciplinom za rešavanje ovog problema, pod sledećim uslovima. Atomi vodonika, kada žele da naprave molekul vode, pozivaju monitorsku proceduru hReady(), atomi kiseonika pozivaju monitorsku proceduru oReady(). Poslednji pristigli atom treba da pozove monitorsku proceduru makeWater(), nakon čijeg završetka sva tri atoma treba da završe svoje odgovarajuće hReady() i oReady() procedure. Ne sme biti izgladnjivanja.
Rešenje
class TheH2OProblem {
private Condition hQueue = new Condition();
private Condition oQueue = new Condition();
private int hCount = 0;
private int oCount = 0;
public synchronized void hReady() {
++hCount;
if (hCount >= 2 && oCount >= 1) {
makeWater();
hCount -= 2;
oCount -= 1;
hQueue.signal();
oQueue.signal();
} else {
hQueue.wait();
}
}
public synchronized void oReady() {
++oCount;
if (hCount >= 2 && oCount >= 1) {
makeWater();
hCount -= 2;
oCount -= 1;
hQueue.signal();
hQueue.signal();
} else {
oQueue.wait();
}
}
private void makeWater() {
// ...
}
}
3. zadatak
- Ovaj zadatak nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.
Postavka
Koristeći aktivne monitore rešiti problem filozofa koji ručavaju (The Dining Philosophers). Filozofi mogu da komuniciraju isključivo sa procesom koordinatorom (centralizovano rešenje). Obezbediti da filozof koji je pre zatražio da jede pre i započinje sa jelom. Napisati kod za filozofe i za proces koordinator
Rešenje
4. zadatak
- Ovaj zadatak nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.
Postavka
Posmatra se semafor za regulaciju saobraćaja na ulici sa jednim pešačkim prelazom. Kada pešak stigne do pešačkog prelaza, ukoliko je svetlo za pešake zeleno, on prelazi ulicu. Ukoliko je u momentu njegovog dolaska svetlo za pešake crveno, on čeka da se uključi zeleno svetlo. Zeleno svetlo za pešake se uključuje ili nakon K sekundi od pojave prvog pešaka koji je zatekao crveno svetlo, ili nakon prolaska C automobila od poslednjeg aktivnog zelenog svetla za pešake. Zeleno svetlo za pešake trajanja G sekundi se pali samo ukoliko je ispunjen neki od navedenih uslova i barem jedan pešak čeka. Potrebno je u jeziku CSP napisati procese pešaka, automobila i semafora, ukoliko je poznato da u sistemu postoji N automobila i T pešaka. Dostupna je funkcija system_current_time koja vraća trenutno vreme sistema.