home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
modula2
/
library
/
tasking
/
locks.mod
< prev
next >
Wrap
Text File
|
1986-04-25
|
792b
|
36 lines
IMPLEMENTATION MODULE Locks;
FROM SYSTEM IMPORT ADDRESS, ADR, SETREG, GETREG, CODE, AX, BX, DS;
FROM Tasks IMPORT NextTask;
TYPE
LockType = BOOLEAN;
PROCEDURE Lock(VAR l: LockType);
BEGIN
WHILE BusyLock(l) DO NextTask END;
END Lock;
PROCEDURE BusyLock(VAR l: LockType): BOOLEAN; (* test and set *)
VAR
lckadd: ADDRESS;
oldlock: BOOLEAN;
BEGIN
lckadd := ADR(l);
SETREG(AX, ORD(TRUE));
SETREG(BX, lckadd.OFFSET);
SETREG(DS, lckadd.SEGMENT);
CODE(
086H, (* XCHG *)
007H); (* al,[BX] *)
GETREG(AX, oldlock);
RETURN oldlock;
END BusyLock;
PROCEDURE Unlock(VAR l: LockType); (* also serves for Init *)
BEGIN
l := FALSE;
END Unlock;
END Locks.