- - - - CENAPAD-MGCO

contents index A seguir: Notas Acima: Exemplos de Uso Anterior: Semáforos


Filósofos

PHIL =

*[ ...
   THINK;
   room ! enter();
   fork(RIGHT) ! pickup();
   fork(LEFT)  ! pickup();
   EAT;
   fork(RIGHT) ! putdown();
   fork(LEFT)  ! putdown();
   room ! exit();
 ]

FORK =

*[
   phil(LEFT) ? pickup() -> phil(LEFT) ? putdown()
 ||
   phil(RIGHT)? pickup() -> phil(RIGHT)? putdown()
 ]

ROOM =

n: integer; n := 0;
*[
   (i:0..4) n < 4; phil(i) ? enter() -> n := n+1
 ||
   (i:0..4) phil(i) ? exit() -> n := n-1;
 ]

Filósofos:

[ room:: ROOM // fork(i:0..4) FORK // phil(i:0..4) PHIL ]



Osvaldo Carvalho - Postscript - Comentários?