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.

Auditor banquero

  • 1.
    PROGRAM banco; {agregar elalg 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.