monitor Kuoppa {
cond saa_ajaa;
cond saa_poistua;
cond saa_kauhoa;
boolean varattu = false,
autovalmis = false;
procedure Haelasti ( ) { # kuormurin koodi
if (varattu) wait (saa_ajaa)
else varattu = true; # vain yksi pääsee kuopalle
# huom. condition passing: jonosta otettaessa 'puomi on suljettu'
aja kuopalle
autovalmis = true; # jos kaivuri ei ole vielä odottamassa
signal (saa_kauhoa); # jos kaivuri on sittenkin jo odottamassa
wait (saa_poistua); # jää odottamaan poistumismerkkiä
aja pois kuopalta
if (!empty (saa_ajaa) signal (saa_ajaa)
else varattu =false; # huom. condition passing
}
procedure Teekuorma ( ) { # kaivurin koodi
if (!autovalmis) wait (saa_kauhoa);
autovalmis= false; # ettei täytetä samaa autoa useaan kertaan
kauho kuormuri täyteen
signal (saa_poistua);
}
process Kuormuri ( ) {
while (true) {
ajele missä ajelet
call Kuoppa. Haelasti ( );
tyhjennä kuorma
}
}