Added upstream from http://ftp.icm.edu.pl/pub/loglan/
[loglan.git] / sources / int / nettest / p.log
1 program p;
2
3
4
5 unit sync : process(nr:integer);
6
7    unit slock:procedure;
8       begin
9       accept sunlock;
10    end slock;
11
12    unit sunlock:procedure;
13       begin
14    end sunlock;
15
16    begin
17    return;
18    do
19       accept slock;
20    od;
21 end sync;
22
23
24
25 unit main_process : process( i:integer, s:sync );
26
27    var cnt : integer;
28
29    unit entry : procedure( i,j:integer );
30       begin
31       writeln("entry called from node ",i," #",j);
32       if j<0 then cnt:=cnt+1; fi;
33    end entry;
34
35    begin
36    cnt := 0;
37    return;
38    while  cnt < 2  do
39       accept entry;
40    od;
41    call s.sunlock;
42 end main_process;
43
44
45
46 unit slave : process( i:integer, m:main_process );
47    var j:integer;
48    begin
49    return;
50    for j:=1 to 10 do
51       call m.entry( i, j );
52    od;
53    call m.entry( i, -1 );
54 end slave;
55
56
57 unit ender : process( i:integer );
58    begin
59    return;
60    call endrun;
61 end ender;
62
63
64 var m:main_process, s1,s2:slave, sem:sync, e:ender;
65
66 begin
67
68    sem := new sync( 0 );
69    resume( sem );
70
71    m := new main_process( 0, sem );
72    resume( m );
73
74    s1 := new slave( 2, m );
75    resume( s1 );
76    s2 := new slave( 3, m );
77    resume( s2 );
78    call sem.slock;
79
80    e := new ender( 2 );
81    resume( e );
82    e := new ender( 3 );
83    resume( e );
84
85    writeln("end of program");
86    call endrun;
87
88 end.
89