1. PROGRAM banco;
{agregar el alg de dekker en las seccion critica}
CONST NCTAS=20;
VAR Cuenta : array[1..NCTAS] of integer; (* Almacena los saldos *)
i: Integer;
PROCESS Auditor;
VAR ci, Total:INTEGER;
BEGIN
REPEAT
Total:=0;
FOR ci:=1 TO NCTAS DO
Total:= Total + Cuenta[ci];
Writeln('Total : ', Total);
FOREVER
END;
PROCESS banquero;
VAR c1, c2, cant: Integer;
BEGIN
REPEAT
c1 := RANDOM(NCTAS-1)+1; (* Origen *)
c2 := RANDOM(NCTAS-1)+1; (* Destino *)
cant:=0;
IF (Cuenta[c1]>50) THEN cant := RANDOM(50);
Cuenta[c1] := Cuenta[c1] - cant ;
Cuenta[c2] := Cuenta[c2] + cant ;
FOREVER
END;
BEGIN (* Principal *)
For i:= 1 TO NCTAS DO cuenta[i]:=100;
COBEGIN
Banquero;
Auditor
COEND
END.