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

}

}