U nekom sustavu postoje dva tipa dretvi: N dretvi tipa student i jedna dretva tipa partibrejker. Studenti se okupljaju u nekoj sobi za zabavu u kojoj može biti proizvoljan broj studenata. Partibrejker može ući u sobu za zabavu samo ako je u sobi 3 ili više studenata. Kada je partibrejker u sobi, ni jedan od studenata više ne može (ni ne želi) ući u sobu, a studenti koji su u sobi mogu izaći. Partibrejker može izaći iz sobe tek kada svi studenti izađu. Broj N > 3 se zadaje na početku izvođenja programa. Zadatak je ispravno sinkronizirati studente i partibrejkera.
Sve što u zadatku nije zadano, riješiti na proizvoljan način.
Dretva student(K)
{
spavaj X milisekundi; // X je slucajan broj izmedu 100 i 500
ponavljaj 3 puta {
udji u sobu za zabavu ako u sobi nema partibrejkera;
ispisi "Student K je usao u sobu";
zabavi se; // spavaj X milisekundi gdje je X slucajan broj izmedju 1000 i 2000
izadji iz sobe za zabavu;
ispisi "Student K je izasao iz sobe";
odspavaj X milisekundi; // X je slucajan broj izmedju 1000 i 2000
}
}
Dretva partibrejker()
{
dok ima studenata u sustavu {
spavaj X milisekundi; // X je slucajan broj izmedju 100 i 1000
udji u sobu za zabavu ako su u sobi 3 ili vise studenata;
ispisi "Partibrejker je usao u sobu";
izadji iz sobe ako u sobi nema vise studenata;
ispisi "Partibrejker je izasao iz sobe";
}
}
"Spavanje" u milisekundama može se postići funkcijom usleep(ms*1000)
koja odgađa izvođenje programa za zadani broj mikrosekundi.