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.

procedure POR (var i: 0..1);var k: integer;beginP(WYK);k := wart(KTÓRY);if nP(S[k]) thenbegin{był podniesiony S[k]}i := k;if k = 0 then V(KTORY)else P(KTÓRY); {w przyszłości będziemy najpierw sprawdzać ten drugi semafor}V(WYK)endelseif nP(S[l-k]) thenbegin{był podniesiony S[l-k]}i := 1 - k;if k = 0 then V(KTORY) else P(KTÓRY);V(WYK)endelse begin{opuszczone oba}V(ILE);V(WYK);P(LUB);if nP(WYBRAL) then i := 1else i := 0;V(WYK)endend;procedure VSINGLE (i: 0..1);var c, llubO, lsO: boolean;beginP(WYK);c := wart(COBYLO[i]) = 1;llubO := wart(ILE) = 0;lsO := czekP(S[i]) = 0;if not llubO and not lsO thenif c then P(COBYLO[i])else V(COBYLO[i]);if not llubO and (c or lsO)thenbeginif i = 1 then V(WYBRAL[i]);P(ILE);V(LUB)end else beginV(S[i]);V(WYK)endend;{ktoś czeka na dowolny oraz ma on tym razem pierwszeństwolub nikt nie czeka na S[i]}Mogłoby się wydawać, że można tutaj zrezygnować z semafora ILE i Zastąpić warunekwart(ILE) = O warunkiem czekP(LUB) = 0. Jednak proces wykonujący procedurę POR wsytuacji, gdy oba semafory S są opuszczone, może podnieść semafor WYK, i nie rozpocząćnatychmiast oczekiwania pod semaforem LUB. Jeżeli teraz wykona się procedura VSINGLE iżaden proces nie czeka pod semaforem S, to ten semafor zostanie podniesiony. Proces, któryteraz zacznie oczekiwanie pod semaforem LUB będzie niepotrzebnie wstrzymywany, mimo żejeden z semaforów S jest podniesiony.222

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

Saved successfully!

Ooh no, something went wrong!