home *** CD-ROM | disk | FTP | other *** search
- - Pascal-FC for Unix systems -
- - Compiler Version P5.2
-
- G L Davies & A Burns, University of Bradford
-
- Compiler listing for file philsem2.pfc
-
-
- 1 0 program philsem2;
- 2 0
- 3 0 (* Dining Philosophers - semaphore version 2
- 4 0 File is /CS/ftp/pub/CS375/sems/philsem2.pfc *)
- 5 0
- 6 0 const
- 7 0 N = 5;
- 8 0 var
- 9 0 fork : array [1..N] of semaphore; (* binary *)
- 10 0 freechairs : semaphore; (* general *)
- 11 0 i : integer;
- 12 0
- 13 0 process type philosophers(name : integer);
- 14 0 begin
- 15 0 repeat
- 16 0 sleep(random(3)); (* THINKING *)
- 17 3 wait(freechairs);
- 18 5 wait(fork[name]);
- 19 9 wait(fork[(name mod N) + 1]);
- 20 17 sleep(random(3)); (* EATING *)
- 21 20 writeln(name);
- 22 23 signal(fork[name]);
- 23 27 signal(fork[(name mod N) + 1]);
- 24 35 signal(freechairs)
- 25 37 forever
- 26 38 end; (* philosophers *)
- 27 39
- 28 39 var
- 29 39 phils: array[1..N] of philosophers;
- 30 39
- 31 39 begin
- 32 39 for i := 1 to N do
- 33 43 initial(fork[I],1);
- 34 50 initial(freechairs,N - 1);
- 35 56 cobegin
- 36 57 for i := 1 to N do
- 37 61 phils[i](i);
- 38 69 coend
- 39 69 end.
-
-
-
- Symbol table
-
- name link object type ref nrm lev adr aux
-
- 45 _main 44 procedure notyp 2 true 0 39 0
- 46 any 0 variable synch 0 true 1 5 0
- 47 n 46 constant integer 0 false 1 5 0
- 48 fork 47 variable array 1 true 1 5 0
- 49 freechairs 48 variable semaphore 0 true 1 10 0
- 50 i 49 variable integer 0 true 1 11 0
- 51 philosophe 50 type id process 3 true 1 0 0
- 52 name 0 variable integer 0 true 2 5 0
- 53 phils 51 variable array 2 true 1 12 0
-
- Generated P-code
-
- 0 ldcon.i 0 3 ;16
- 1 stfun.i 0 19 ;16
- 2 sleep 0 0 ;16
- 3 ldadr 1 10 ;17
- 4 swait 0 0 ;17
- 5 ldadr 1 5 ;18
- 6 ldval.i 2 5 ;18
- 7 ixary.i 0 1 ;18
- 8 swait 0 0 ;18
- 9 ldadr 1 5 ;19
- 10 ldval.i 2 5 ;19
- 11 ldcon.i 0 5 ;19
- 12 modop.i 0 0 ;19
- 13 ldcon.i 0 1 ;19
- 14 addop.i 0 0 ;19
- 15 ixary.i 0 1 ;19
- 16 swait 0 0 ;19
- 17 ldcon.i 0 3 ;20
- 18 stfun.i 0 19 ;20
- 19 sleep 0 0 ;20
- 20 ldval.i 2 5 ;21
- 21 wrval.i 0 0 ;21
- 22 wrlin 0 0 ;21
- 23 ldadr 1 5 ;22
- 24 ldval.i 2 5 ;22
- 25 ixary.i 0 1 ;22
- 26 signl 0 0 ;22
- 27 ldadr 1 5 ;23
- 28 ldval.i 2 5 ;23
- 29 ldcon.i 0 5 ;23
- 30 modop.i 0 0 ;23
- 31 ldcon.i 0 1 ;23
- 32 addop.i 0 0 ;23
- 33 ixary.i 0 1 ;23
- 34 signl 0 0 ;23
- 35 ldadr 1 10 ;24
- 36 signl 0 0 ;24
- 37 jmpuc 0 0 ;24
- 38 rproc 1 0 ;25
- 39 ldadr 1 11 ;31
- 40 ldcon.i 0 1 ;32
- 41 ldcon.i 0 5 ;32
- 42 for1u.i 0 50 ;32
- 43 ldadr 1 5 ;33
- 44 ldval.i 1 11 ;33
- 45 ixary.i 0 1 ;33
- 46 ldcon.i 0 1 ;33
- 47 lobnd.i 0 0 ;33
- 48 sinit 0 0 ;33
- 49 for2u.i 0 43 ;33
- 50 ldadr 1 10 ;34
- 51 ldcon.i 0 5 ;34
- 52 ldcon.i 0 1 ;34
- 53 subop.i 0 0 ;34
- 54 lobnd.i 0 0 ;34
- 55 sinit 0 0 ;34
- 56 cobeg 0 0 ;34
- 57 ldadr 1 11 ;35
- 58 ldcon.i 0 1 ;36
- 59 ldcon.i 0 5 ;36
- 60 for1u.i 0 69 ;36
- 61 mkstk 1 51 ;36
- 62 ldadr 1 12 ;36
- 63 ldval.i 1 11 ;37
- 64 ixary.i 0 2 ;37
- 65 procv 0 0 ;37
- 66 ldval.i 1 11 ;37
- 67 calls 1 5 ;37
- 68 for2u.i 0 61 ;37
- 69 coend 0 0 ;37
- 70 stopx 0 0 ;38
-