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.

W poprzednim rozwiązaniu każda porcja jest przekazywana między kolejnymiprocesami bufora. Dzięki temu procesy producenta i konsumenta są bardzo proste, aleprzejście porcji przez bufor może trwać długo.Następujące rozwiązanie nie ma tej wady. Użyto tu przełącznika nast, który wskazujeprocesowi PRODUCENT, do którego elementu bufora ma wstawiać, a procesowiKONSUMENT, z którego elementu bufora ma pobierać.Schemat komunikacji między procesami przedstawia rys. 5.22.comment N - wielkość bufora;[PRODUCENT:: p: porcja; nast: integer;nast := 0;*[true -> produkuj(p);[(i: 0..N-1) nast = i -> BUFOR(i)!p;nast := (nast+1) mod N]]||BUFOR(i: 0..N-1):: p: porcja;*[PRODUCENT?? -> KONSUMENT!?]|l KONSUMENT:: p: porcja; nast: integer;nast := 0;*[(i: 0..N-1) nast = i; BUFOR(i)?p ->nast := (nast+1) mod N;konsumuj(p)]]5.4.2 Powielanie plikówRozwiązanie lPrzyjmiemy założenie, że każdy z procesów P(l..N) może być albo czytelnikiem, albopisarzem. Czytelnik będzie wysyłał do swojego SEKRETARZa komunikat POZWÓL (f alse), apisarz komunikat POZWÓL (true). Pozostałe komunikaty będą miały takie samo znaczenie jakw przykładzie 5.2.1.Zmienna logiczna pisarz wskazuje, czy obsługa dotyczy czytelnika, czy pisarza, azmienna logiczna mam mówi, czy czytelnik zarezerwował sobie miejsce w czytelni (dodającjedynkę do krążącego komunikatu). Zmienna chcę ma wartość true między odebraniemkomunikatu POZWÓL a odebraniem komunikatu SKOŃCZYŁEM. Dzięki temu można odróżnićstan, w którym czytelnik już skończył czytać, ale ma jeszcze prawo do czytania. Jeśli w tymstanie będzie chciał ponownie czytać, to może to zrobić natychmiast. Jeśli w tym stanieotrzyma UPRAWNIENIE, to oddaje prawo do czytania. Zauważmy, że gdyby nie odróżniało siętego stanu, to kolejne czytania przez ten sam proces odbywałyby się co dwa obiegi żetonu.comment N - liczba procesów;SEKRETARZU: 1..N):: chcę, mam, pisarz: boolean;ile: integer;[i = l -> SEKRETARZ(2)!UPRAWNIENIE(0)[] i l -> skip ] ;chcę := false;mam := false;*[P(i)?POZWÓL(pisarz) -> chcę := true;[]not pisarz; mam -> P(i)!MOGĘ()[]not pisarz; not mam -> skip134

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

Saved successfully!

Ooh no, something went wrong!