Programowanie wspóÅbieżne. Systemy czasu rzeczywistego - Helion
Programowanie wspóÅbieżne. Systemy czasu rzeczywistego - Helion
Programowanie wspóÅbieżne. Systemy czasu rzeczywistego - Helion
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Rozdzia 8. Problemy programowania wspóbienego 229<br />
with ADA.Text_IO; use ADA.Text_IO;<br />
with ADA.Integer_Text_IO; use ADA.Integer_Text_IO;<br />
with Semafory; use Semafory;<br />
procedure ProducentKonsument is<br />
Max:Integer := 50;<br />
LProducentow: Integer := 5; LKonsumentow: Integer := 5;<br />
task type Producent(nr: Integer := 0);<br />
task type Konsument(nr: Integer := 0);<br />
type WskProducent is access Producent;<br />
type WskKonsument is access Konsument;<br />
producenci: array(1..LProducentow) of WskProducent;<br />
konsumenci: array(1..LKonsumentow) of WskKonsument;<br />
SP, SK: SemBin; Miejsca, Dane: Sem;<br />
n: constant Integer := 10;<br />
Bufor: array(1..n) of Integer;<br />
wskP, wskK: Integer := 0;<br />
task body Producent is<br />
info: Integer := 1;<br />
begin<br />
loop<br />
Put("produkuje producent nr :"); Put(nr); New_Line;<br />
Miejsca.wait;<br />
SP.wait;<br />
wskP := (wskP mod n) + 1;<br />
Bufor(wskP) := info;<br />
SP.signal;<br />
Dane.signal;<br />
end loop;<br />
end Producent;<br />
task body Konsument is<br />
info: Integer := 1;<br />
begin<br />
loop<br />
Dane.wait;<br />
SK.wait;<br />
wskK := (wskK mod n) + 1;<br />
info := Bufor(wskK);<br />
SK.signal;<br />
Miejsca.signal;<br />
Put("konsumpcja konsumenta nr :"); Put(nr);<br />
end loop;<br />
end Konsument;<br />
procedure start is<br />
i, j: Integer;<br />
begin<br />
for i in 1..LProducentow loop<br />
producenci(i) := new Producent(i); end loop;<br />
for j in 1..LKonsumentow loop<br />
konsumenci(j) := new Konsument(j); end loop;<br />
end start;<br />
begin<br />
Miejsca.init(n); -- warto pocztkowa N<br />
Miejsca.init(0); -- warto pocztkowa 0, bo bufor pusty<br />
Start;<br />
end ProducentKonsument;