home *** CD-ROM | disk | FTP | other *** search
/ cs.rhul.ac.uk / www.cs.rhul.ac.uk.zip / www.cs.rhul.ac.uk / pub / CS375 / dekker.pfc < prev    next >
Text File  |  1999-02-05  |  943b  |  59 lines

  1. program dekker;
  2.  
  3. (* Dekker's solution to the mutual exclusion problem *)
  4.  
  5. var
  6.   turn: integer;
  7.   flag1, flag2: boolean;
  8.   count: integer;
  9.  
  10. process turnstile1;
  11. var
  12.   loop: integer;
  13. begin
  14.   for loop := 1 to 20 do
  15.     begin
  16.       flag1 := true;
  17.       while flag2 do
  18.         begin
  19.           flag1 := false;
  20.           while turn = 2 do null;
  21.           flag1 := true
  22.         end;
  23.       count := count + 1;
  24.       turn := 2;
  25.       flag1 := false
  26.     end
  27. end;  
  28.  
  29.  
  30. process turnstile2;
  31. var
  32.   loop: integer;
  33. begin
  34.   for loop := 1 to 20 do
  35.     begin
  36.       flag2 := true;
  37.       while flag1 do
  38.         begin
  39.           flag2 := false;
  40.           while turn = 1 do null;
  41.           flag2 := true
  42.         end;
  43.       count := count + 1;
  44.       turn := 1;
  45.       flag2 := false
  46.     end
  47. end;  
  48.  
  49. begin
  50.   count := 0;
  51.   turn := 1; (* it doesn't matter whether this is 1 or 2 *)
  52.   cobegin
  53.     turnstile1;
  54.     turnstile2
  55.   coend;
  56.   writeln('Total admitted:  ',count)
  57. end.
  58.  
  59.