program Second; unit aSemaphore: process(node:integer); unit pass: procedure; begin return enable free disable pass; end pass; unit free: procedure; begin return enable pass disable free; end free; unit fin: procedure; begin bol := false; end fin; var bol: boolean; begin bol := true; return; enable pass ; while bol do accept fin; od; writeln("koniec semafora"); end aSemaphore; unit writer: process (node:integer, nr:integer,s: string, sem: aSemaphore); var i: integer, A: arrayof char; unit fin: procedure; begin end fin; begin A:=unpack(s); return; call sem.pass; writeln("jestem w procesie ",nr); for i := lower(a) to upper(a) do write(a(i)); od; writeln; writeln("skonczyl",nr); call sem.free; accept fin; end writer; var s: aSemaphore, w1, w2: writer, i: integer; begin s := new aSemaphore(0); resume(s); w1:= new writer(0,1,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",s); w2:= new writer(0,2,"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", s); writeln("press Enter"); readln; resume(w1); resume(w2); call w1.fin; call w2.fin; call s.fin; writeln("polaczone procesy"); (* call endrun; *) end Second