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.
254 <strong>Programowanie</strong> wspóbiene. <strong>Systemy</strong> <strong>czasu</strong> <strong>rzeczywistego</strong><br />
Rozwizanie pozbawione powyszych wad zaproponowa P.B. Hansen 10 . Kady proces,<br />
który chce wej do czytelni, sprawdza, czy s procesy z drugiej grupy oczekujce na<br />
wejcie. Jeli ich nie ma, umoliwia wejcie do czytelni wszystkim procesom ze swojej<br />
grupy. Wstrzymanie procesów czytelnika, jeli pisarz jest w czytelni, jest realizowane<br />
przez semafor Czytanie. Semafor Pisanie wstrzymuje natomiast pisarzy, gdy w czytelni<br />
przebywaj czytelnicy. Po wyjciu z czytelni ostatniego procesu z danej grupy wpuszczane<br />
s procesy z drugiej. Pisarz po opuszczeniu czytelni podnosi wielokrotnie semafor<br />
Czytelnia (operacja Czytelnia.signal). Analogicznie postpuje opuszczajcy czytelni<br />
ostatni czytelnik, realizujc operacje na semaforze Pisanie. Pisarze wchodz do czytelni,<br />
wzajemnie si wykluczajc (t wasno gwarantuje dodatkowy semafor binarny). Kolejny<br />
semafor binarny gwarantuje wzajemne wykluczanie w dostpie do zmiennych<br />
globalnych (dzielonych) okrelajcych liczb oczekujcych pisarzy i czytelników. Kod<br />
ilustrujcy to rozwizanie zosta zamieszczony w dodatku A.<br />
Do duy stopie skomplikowania powyej przedstawionych rozwiza wynika z braku<br />
bezporedniej implementacji w klasycznym semaforze metody umoliwiajcej sprawdzenie<br />
liczby zada oczekujcych na operacj opuszczania semafora 11 . W Adzie istnieje<br />
moliwo sprawdzania liczby zada zawieszonych (wywoujcych wejcia zadania<br />
typu serwer) w oczekiwaniu na realizacj spotkania z zadaniem serwera.<br />
8.3.2. Spotkania<br />
Struktura rozwizania problemu pisarzy i czytelników oparta na mechanizmie spotka<br />
zostaa omówiona w punkcie 6.2.2. Zaprezentowane rozwizanie nie gwarantowao, e po<br />
zapisie danych przez pisarza wszyscy czytelnicy zd je odczyta, zanim kolejny pisarz<br />
wejdzie do czytelni. Kompilacja tego rozwizania z prezentowanym w punkcie 6.2.2<br />
pozwala uzyska kompletny kod opisywanego przypadku. Poniszy kod oprócz ogólnej<br />
struktury zadania Czytelnia (np. pominito programowanie wej dla tego zadania)<br />
zawiera jedynie instrukcje zapewniajce odczyt wszystkim czytelnikom oraz specyfikacje<br />
i tre zada Pisarz i Czytelnik.<br />
task Czytelnia is<br />
entry StartCzytanie(E: out typ);<br />
entry StopCzytanie;<br />
entry Pisanie(E: in typ);<br />
end Czytelnia;<br />
task body Czytelnia is<br />
iluCzyta: Integer := 0; -- liczba czytelników w czytelni<br />
ksiazka: typ;<br />
begin<br />
loop<br />
select<br />
when Pisanie'Count = 0 =><br />
accept StartCzytanie(E: out typ) do...<br />
or<br />
accept StopCzytanie do...<br />
or<br />
10 Hansen P., Podstawy systemów operacyjnych, WNT, Warszawa 1979.<br />
11 Na wyznaczenie i testowanie aktualnej wartoci semafora pozwalaj semafory zdefiniowane w systemie Unix.