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.