12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

VB(CHROŃ_J);V(PEŁNE)endend;process KONSUMENT(i: 1..K);var p: porcja;beginwhile true do beginP(PEŁNE);PB(CHROŃ_K);p := bufor[k];k := k mod N + l;VB(CHROŃ_K);V(WOLNE);konsumuj(p)endend;W tym rozwiązaniu także jest możliwe jednoczesne wstawianie i pobieranie, ale wkażdej chwili tylko jeden PRODUCENT może wstawiać i tylko jeden KONSUMENT możepobierać. Wstawianie jest sekcją krytyczną producentów chronioną semaforem CHROŃ_J, apobieranie jest sekcją krytyczną konsumentów chronioną semaforem CHROŃ_K.3.2.3 Czytelnicy i pisarzeRozwiązanie poprawnePrzedstawimy rozwiązanie zaproponowane przez Brinch Hansena [Brin79]. Ma ono tęinteresującą własność, że z dokładnością do używanych zmiennych jest prawie identyczne dlaczytelników i pisarzy. Jedyna różnica polega na tym, że pisarze są dodatkowo wstrzymywanina semaforze W, gwarantującym wyłączność pisania.Każdy proces pragnący wejść do czytelni, stwierdziwszy, że nie ma oczekującychprocesów z drugiej grupy, wpuszcza wszystkie oczekujące przed nim procesy tej samej grupy.Po wyjściu z czytelni proces, który stwierdzi, że jest ostatni ze swojej grupy, wpuszczawszystkie oczekujące procesy drugiej grupy (oczywiście w przypadku pisarzy wchodzą oni doczytelni po kolei). W rezultacie, jeśli w czytelni są czytelnicy, to może do nich dołączyć nowyczytelnik tylko wtedy, gdy nie czekają pisarze. Jeśli pisarze czekają, to po wyjściu ostatniegoczytelnika będą kolejno wpuszczeni do czytelni.const M = ?; {liczba czytelników}P = ?; {liczba pisarzy}var ac: integer := 0; {aktywni czytelnicy}dc: integer := 0; {działający czytelnicy}ap: integer := 0; {aktywni pisarze}dp: integer := 0; {działający pisarze}CZYT: semaphore := 0; {wstrzymuje czytelników}PIS: semaphore := 0; {wstrzymuje pisarzy}CHROŃ: binary semaphore := l;{do ochrony zmiennych}W: binary semaphore := 1; {do wykluczania pisarzy}process CZYTELNIK (i:1..M) ;beginwhile true do beginwłasne_sprawy;39

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!