SOP wyk nr 13-Slajd28

Z Studia Informatyczne
Wersja z dnia 10:56, 16 sie 2006 autorstwa Dwa (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Synchronizacja czytelników i pisarzy za pomocą semaforów binarnych (2)

Synchronizacja czytelników i pisarzy za pomocą semaforów binarnych (2)


W prezentowanym rozwiązaniu czytelnik może wejść do czytelni zawsze, gdy nie ma w niej pisarza. Czytelnik zamyka zatem semafor mutex _ r , chroniący zmienną l _ czyt , po czym zwiększa ją o 1. Jeśli po zwiększeniu o 1 zmienna równa jest 1, to znaczy, że jest on pierwszym czytelnikiem, który zajął czytelnię. Musi on zatem zamknąć wejście pisarzom poprzez opuszczenie semafora mutex _ w . Mogłoby się okazać jednak, że w czytelni nie było wprawdzie czytelników, ale był właśnie pisarz. Operacja opuszczenia semafora mutex _ w powstrzyma czytelnika przed dostępem do czytelni do czasu wyjścia z niej pisarza (patrz następny slajd).

Jeśli do czytelni wchodzą kolejni czytelnicy, nie wykonują już operacji na semaforze mutex _ w . Zamknął go już pierwszy czytelnik.

Przy wyjściu czytelnika z czytelni zmniejszana jest wartość zmiennej l _ czyt . Operacja chroniona jest oczywiście przez semafor mutex _ r , gwarantujący realizację w sekcji krytycznej. Gdyby po zmniejszeniu zmiennej l _ licz okazało się, że jest ona równa 0, to znaczy, że z czytelni wyszedł ostatni czytelnik i można dać szansę pisarzowi. Podnoszony jest zatem semafor mutex _ w .

Może się jednak tak zdarzyć, że w czytelni zawsze będzie jakiś czytelnik. Zanim wyjdzie jeden czytelnik, następny może już wejść do czytelni. Można w ten sposób doprowadzić do głodzenia pisarzy.


<< Poprzedni slajd | Spis treści | Następny slajd >>