home *** CD-ROM | disk | FTP | other *** search
/ cs.rhul.ac.uk / www.cs.rhul.ac.uk.zip / www.cs.rhul.ac.uk / pub / CS375 / philsem1.pfc < prev    next >
Text File  |  1999-03-15  |  696b  |  39 lines

  1. program philsem1;
  2.  
  3. (* Dining Philosophers - semaphore version 1 
  4. File is /CS/fftp/pub/CS375/sems/philsem1.pfc
  5. *)
  6.  
  7. const
  8.    N = 5;
  9. var 
  10.    fork : array [1..N] of semaphore;  (* binary *)
  11.    i : integer;
  12.  
  13. process type philosophers(name : integer);
  14. begin
  15.    repeat
  16.       sleep(random(3));   (* THINKING *)
  17.       wait(fork[name]);
  18.       wait(fork[(name mod N) + 1]);
  19.       sleep(random(3));   (* EATING *)
  20.       writeln(name);
  21.       signal(fork[name]);
  22.       signal(fork[(name mod N) + 1]);
  23.    forever
  24. end;  (* philosophers *)
  25.  
  26. var
  27.    phils: array[1..N] of philosophers;
  28.  
  29. begin
  30.    for i := 1 to N do
  31.       initial(fork[i],1);
  32.    cobegin
  33.       for i := 1 to N do
  34.          phils[i](i);
  35.    coend
  36. end.
  37.  
  38.  
  39.