Advertisement
i51243l

Filosofos MONITOR

Mar 11th, 2014
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.09 KB | None | 0 0
  1. program Filosofos;
  2.  
  3. CONST NF = 4;
  4. VAR k : INTEGER;
  5.  
  6. MONITOR Palillos;
  7. EXPORT Coger, Dejar;
  8. VAR palillos: ARRAY[1..NF] OF INTEGER;
  9. comer: ARRAY [1..NF] OF CONDITION;
  10. n: INTEGER;
  11.  
  12. PROCEDURE Coger(i: INTEGER);
  13. BEGIN
  14. IF palillos[i]<>2 THEN delay(comer[i]);
  15. palillos[ (n MOD NF) + 1 ] := palillos [ (n MOD NF) + 1 ] - 1;
  16. palillos[ ((n+NF-2) MOD NF) + 1 ] := palillos [ ((n+NF-2) MOD NF) + 1 ]-1;
  17. writeln('Filosofo ',i,' empezó a comer');
  18. END;
  19.  
  20. PROCEDURE Dejar(i:INTEGER);
  21. BEGIN
  22. writeln('Filosofo ',i,' dejó a comer');
  23. palillos[ (n MOD NF) + 1 ] := palillos [ (n MOD NF) + 1 ] + 1;
  24. palillos[ ((n+NF-2) MOD NF) + 1 ] := palillos [ ((n+NF-2) MOD NF) + 1 ] +1;
  25. IF palillos[(n MOD NF) + 1] = 2 THEN resume(comer[(n MOD NF) + 1]);
  26. IF palillos[((n+NF-2) MOD NF) + 1] = 2 THEN resume(comer[((n+NF-2) MOD NF) + 1]);
  27. END;
  28.  
  29. BEGIN
  30. FOR k:=1 TO NF DO Palillos[k] := 2;
  31. END;
  32.  
  33. PROCESS TYPE Filosofos(n:INTEGER);
  34. BEGIN
  35. repeat
  36. Palillos.Coger(n);
  37. sleep(random(1));
  38. Palillos.Dejar(n);
  39. forever
  40. END;
  41.  
  42. VAR filo : ARRAY[1..NF] OF Filosofos;
  43.  
  44. begin
  45. COBEGIN
  46. FOR k:=1 TO NF DO
  47. filo[k](k);
  48. COEND
  49. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement