U automobilističkoj utrci sudjeluju dva tima s po 3 vozača i svaki tim ima svoj boks, 4 mehaničara i osobu sa zastavicom (lollipop man). Svaki vozač tijekom utrke ulazi u boks svojeg tima na promjenu guma dva puta. Vozač čeka ispred boksa ako je njegov boks zauzet. Nakon što se vozač zaustavi na svom mjestu u boksu, osoba sa zastavicom spušta zastavicu i četvorica mehaničara pristupaju zamjeni kotača (naravno, može se dogoditi da istovremeno mehaničari u oba boksa mijenjaju gume). Kada mehaničar završi svoj posao, javlja osobi sa zastavicom i nakon što sva četvorica mehaničara zamijene svaki svoj kotač osoba sa zastavicom diže zastavicu i time pušta vozača natrag u utrku. Pretpostavlja se da mehaničari i osoba sa zastavicom završe s radom kada dvaput zamijene gume svakom vozaču jer su imali pripremljeni samo dva seta guma po vozilu.
Simulirati utrku dva tima s po 3 dretve vozača, 4 dretve mehaničara i jednom dretvom osoba_sa_zastavicom. Sve navedene dretve stvara glavna dretva programa. Dretve sinkronizirati monitorima.
Sve što u zadatku nije zadano, riješiti na proizvoljan način.
glavna dretva(){
stvori 6 dretvi vozača, 8 dretvi mehaničara i 2 dretve lollipop man;
označi početak utrke;
}
dretva vozač(){
čekaj početak utrke;
vozi x milisekundi gdje je x slučajan broj između 2000 i 5000 ms;
idi u boks zamijeniti gume;
vozi (7000 - x)ms;
idi u boks zamijeniti gume;
vozi y milisekundi gdje je y slučajan broj između 2000 i 3000 ms;
ispiši završio utrku;
}
dretva mehaničar(){
dok traje utrka{
čekaj dok osoba sa zastavicom da znak da se mogu mijenjati gume;
zamijeni_kotač; // simulirati čekanjem z milisekundi gdje je z slučajan broj između 2000 i 4000 ms
javi lollipop manu da je kotač zamijenjen;
}
}
dretva osoba_sa_zastavicom(){ // osoba sa zastavicom
dok traje utrka{
pokaži zastavicom vozaču da može doći promijeniti gume;
čekaj dok se vozač ne zaustavi;
spusti zastavicu;
čekaj dok mehaničari ne zamijene kotače;
podigni zastavicu;
}
}
"Spavanje" u milisekundama može se postići funkcijom usleep(ms*1000)
koja odgađa izvođenje programa za zadani broj mikrosekundi.