Programowanie wspóÅbieżne. Systemy czasu rzeczywistego - Helion
Programowanie wspóÅbieżne. Systemy czasu rzeczywistego - Helion
Programowanie wspóÅbieżne. Systemy czasu rzeczywistego - Helion
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Rozdzia 8. Problemy programowania wspóbienego 237<br />
Kady z filozofów wykonuje naprzemiennie dwie operacje — mylenie i jedzenie.<br />
Struktura procesu filozofa jest nastpujca:<br />
task Filozof;<br />
task body Filozof is<br />
begin<br />
loop<br />
Filozof_myli;<br />
Protokó_wstpny;<br />
Filozof_je;<br />
Protokó_kocowy;<br />
end loop;<br />
end Filozof;<br />
Przed kadym z piciu filozofów stoi talerz oraz le dwa widelce. Filozof potrzebuje<br />
dwóch widelców (dwóch zasobów), aby móc rozpocz operacj „jedzenie”, która stanowi<br />
sekcj krytyczn. Problem polega na zsynchronizowaniu dostpu filozofów do widelców<br />
(kady widelec jest wspódzielony przez dwóch filozofów siedzcych obok siebie)<br />
gwarantujcego ywotno lokaln i globaln programu.<br />
Wspódzielenie widelców przez ssiadujcych filozofów wymusza wzajemne wykluczanie<br />
w ich uytkowaniu. Naturalnym mechanizmem gwarantujcym wzajemne wykluczanie<br />
jest semafor binarny, dlatego w pierwszym rozwizaniu problemu dostp do kadego<br />
widelca bdzie synchronizowany przez semafor binarny. Kady filozof, aby rozpocz jedzenie,<br />
musi wykona operacj opuszczania dwóch semaforów binarnych. Przy wyjciu<br />
z sekcji krytycznej filozof oddaje widelce, realizujc operacj signal — kolejno dla<br />
widelca z prawej, a nastpnie z lewej strony.<br />
Widelce: array(1..5) of SemBin;<br />
task type Filozof(Nr: Integer);<br />
task body Filozof is<br />
begin<br />
loop<br />
Filozof_myli;<br />
Widelce(Nr).wait;<br />
Widelce((Nr mod 5) + 1).wait;<br />
Filozof_je;<br />
Widelce(nr).signal;<br />
Widelce((Nr mod 5) + 1).signal;<br />
end loop;<br />
end Filozof;<br />
atwo zauway, e rozwizanie umoliwiajce filozofom kompletowanie widelców<br />
przez ich sekwencyjne pobieranie moe doprowadzi do blokady w przypadku, gdy<br />
kady z filozofów podniesie lewy widelec i blokujc dostp do niego, oczekuje na prawy<br />
widelec. Problem blokady procesów filozofów zosta szczegóowo przedstawiony w podrozdziale<br />
3.3. Omówiono metody unikania blokady i zapobiegania blokadzie oparte na<br />
negacji jednego z czterech warunków koniecznych wystpienia blokady: wzajemnego<br />
wykluczania, wywaszczania procesów z zasobów dzielonych, czciowego przydziau<br />
zasobów oraz cyklicznego oczekiwania procesów.<br />
Z wymaga zaoonych na wspóprac procesów w problemie piciu filozofów wynika,<br />
e nie mona zwikszy liczby dostpnych zasobów, dlatego negacja warunku wzajemnego<br />
wykluczania nie bdzie podstaw poniszych implementacji. Negacja warunku