Seuraavassa on kaksi rutiinistoa, jotka on tarkoitettu poissulkemisen toteuttamiseen. Kumpi toimii vai toimiiko kumpikaan? Perustele. Tehtävässä R-alkuiset muuttujat viittaavat tietokoneen rekisterihin ja jokainen rivi kuvautuu yhdeksi konekäskyksi prosessorille. Jokainen lukitusta haluava ohjelma kutsuu LOCK-rutiinia ja avaamista haluava vastaavasti rutiinia UNLOCK. (3p)
Toteutus 1:
LOCK_BIT: integer := 0; -- alustusarvo 0
UNLOCK:
R1 := 0;
LOCK_BIT := R1;
return;
LOCK: R1 := 1;
L: R1 := LOCK_BIT; LOCK_BIT := R1
-- eli vaihdettiin yhdellä käskyllä R1:n ja LOCK_BITin
-- sisällöt keskenään
if R1 > 0 then goto L; end if;
return;
Toteutus 2:
(UNLOCK() on sama kuin kohdassa 1)
LOCK_BIT: integer := 0; -- alustusarvo 0
LOCK: R1 := LOCK_BIT;
if R1 > 0 then goto LOCK; end if;
R1 := 1;
LOCK_BIT := R1;
return;