Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.4.Wybraneproblemyprogramowaniawspółbieżnego
19
1.są_miejsca:semafor:=(47);--semaforograniczającyliczbęfilozofów
--obecnychprzystole
2.taskFilozofi;--dlail0,1,...,4
3.taskbodyFilozofiis
4.begin
5.
loop
6.
MYŚL;
7.
wait(są_miejsca);--uzyskajpozwoleniezajęciamiejscaprzystole
8.
wait(widelec(i));--podnieślewywidelec
9.
wait(widelec((i+1)mod5));--podnieśprawywidelec
10.
JEDZ;
11.
signal(widelec(i));--połóżlewywidelec
12.
signal(widelec((i+1)mod5));--połóżprawywidelec
13.
signal(są_miejsca);--zwolnijmiejsceprzystole
14.
endloop;
15.endFilozofi;
Rysunek10110Rozwiązanieproblemuucztującychfilozofówzograniczeniemliczbyfilozofów
jednocześnieobecnychprzystole(operacjewwierszach7–9i11–13składająsię,odpowiednio,na
protokółwstępnyikońcowy)
1.taskFilozofi;--dlail0,1,...,4
2.taskbodyFilozofiis
3.
p,q:natural;--zmiennepomocnicze
4.begin
5.
ifimod2l0then--dlazadańonumerachparzystych
6.
p:=i;q:=(i+1)mod5;
7.
else--dlazadańonumerachnieparzystych
8.
p:=(i+1)mod5;q:=i;
9.
endif;
10.
loop
11.
MYŚL;
12.
wait(widelec(p));
13.
wait(widelec(q));
14.
JEDZ;
15.
signal(widelec(p));
16.
signal(widelec(q));
17.
endloop;
18.endFilozofi;
Rysunek10120Asymetrycznerozwiązanieproblemuucztującychfilozofów