Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Filosofos;
- CONST NF = 4;
- VAR k : INTEGER;
- MONITOR Palillos;
- EXPORT Coger, Dejar;
- VAR palillos: ARRAY[1..NF] OF INTEGER;
- comer: ARRAY [1..NF] OF CONDITION;
- n: INTEGER;
- PROCEDURE Coger(i: INTEGER);
- BEGIN
- IF palillos[i]<>2 THEN delay(comer[i]);
- palillos[ (n MOD NF) + 1 ] := palillos [ (n MOD NF) + 1 ] - 1;
- palillos[ ((n+NF-2) MOD NF) + 1 ] := palillos [ ((n+NF-2) MOD NF) + 1 ]-1;
- writeln('Filosofo ',i,' empezó a comer');
- END;
- PROCEDURE Dejar(i:INTEGER);
- BEGIN
- writeln('Filosofo ',i,' dejó a comer');
- palillos[ (n MOD NF) + 1 ] := palillos [ (n MOD NF) + 1 ] + 1;
- palillos[ ((n+NF-2) MOD NF) + 1 ] := palillos [ ((n+NF-2) MOD NF) + 1 ] +1;
- IF palillos[(n MOD NF) + 1] = 2 THEN resume(comer[(n MOD NF) + 1]);
- IF palillos[((n+NF-2) MOD NF) + 1] = 2 THEN resume(comer[((n+NF-2) MOD NF) + 1]);
- END;
- BEGIN
- FOR k:=1 TO NF DO Palillos[k] := 2;
- END;
- PROCESS TYPE Filosofos(n:INTEGER);
- BEGIN
- repeat
- Palillos.Coger(n);
- sleep(random(1));
- Palillos.Dejar(n);
- forever
- END;
- VAR filo : ARRAY[1..NF] OF Filosofos;
- begin
- COBEGIN
- FOR k:=1 TO NF DO
- filo[k](k);
- COEND
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement