12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Rozwiązanie 2[]pisarz -> skip ][]SEKRETARZ((i-2+N) mod N + l)?UPRAWNIENIE(ile) ->[chcę; pisarz; ile = 0 -> P(i)!MOGĘ();P(i)?SKOŃCZYŁEM();chcę := falseGchcę; pisarz; ile > 0 -> skip[]chcę; not pisarz; mam -> skipGchcę; not pisarz; not mam ->(mam, ile) := (true, ile + 1);P(i)!MOGĘ()Gnot chcę; mam ->(mam, ile) := (false, ile - 1);Gnot chcę; not mam -> skip];SEKRETARZU mod N + 1) lUPRAWNIENE(ile) ;[]P(i)?SKOŃCZYLEM() -> chcę := false]Ponieważ wszyscy czytelnicy mogą odczytywać swoje kopie równocześnie, więcmiędzy procesami powinno dodatkowo krążyć tyle komunikatów, ilu jest czytelników.Komunikaty te nazwiemy MIEJSCEO, gdyż symbolizują one miejsce w czytelni. Zakładamy,że liczba czytelników (miejsc) wynosi C, C < N-l. Na początku proces SEKRETARZ(l) wyśle wpierścień C komunikatów MIEJSCEO oraz jeden komunikat UPRAWNIENIEO, który będziepełnił taką samą rolę jak semafor binarny W w przykładzie 3.2.3, tzn. będzie służył dowzajemnego wykluczania pisarzy. SEKRETARZ czytelnika może zezwolić na czytanie, jeśliotrzyma komunikat MIEJSCEO. SEKRETARZ pisarza może pozwolić na pisanie, jeśli otrzymakomunikat UPRAWNIENIEO, a następnie zbierze wszystkie komunikaty MIEJSCEO. Pozakończeniu czytania proces SEKRETARZ generuje nowy komunikat MIEJSCEO, pozakończeniu pisania trzeba wygenerować na nowo wszystkie komunikaty. W zmiennej ilezlicza się, ile komunikatów MIEJSCEO zebrał już pisarz. Zmienna mam_prawo wskazuje, czypisarz już zdobył uprawnienie.comment N - liczba procesów,C - liczba czytelników, C < N - 1;SEKRETARZU: 1..N):: chcę, pisarz: boolean;ile: integer; mam_prawo: boolean;[i = l -> SEKRETARZ(2)!UPRAWNIENIEO;ile := C;*[ile > O -> SEKRETARZ(2) !MIEJSCEO;ile := ile - 1];[]i l -> skip];chcę := false;*[P(i)?POZWÓL(pisarz) ->(chcę, mam_prawo) := (true, false)[] SEKRETARZ (U-2+N) mod N + 1)?MIEJSCE() ->[chcę; not pisarz -> P(i)!MOGĘ();chcę := false[]chcę; pisarz; mam_prawo -> ile := ile + 1;[ile = C -> P(i)!MOGĘ();chcę := false[] ile < C - > skip ][] chcę; pisarz; not mam_prawo ->SEKRETARZU mod N + 1)!MIEJSCE()[]not chcę -> SEKRETARZ(i mod N + 1) !MIEJSCE()]135

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

Saved successfully!

Ooh no, something went wrong!