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(DOSTĘP)case i of {synchronizacja przed nową}1: begin {rundą}PB(KONIEC); {Pl czeka, aż P2 skończy}łapki := 2; {ustawia się na nowo}VB(CZEKA) {daje sygnał do nowej rundy}end;2: beginVB(KONIEC); {P2 kończy}PB(CZEKA) {P2 czeka na sygnał od Pl}endendendend;Każdy proces w danej rundzie najpierw odejmuje jedynkę od zmiennej łapki a potemsprawdza, czy jej wartość wynosi jeden. Jeśli oba procesy odejmą jedynkę przedsprawdzeniem, oba stwierdzą, że wartość, jest różna od jedności, a więc będzie remis. Jeślijeden z nich zdąży sprawdzić wartość, zanim drugi odejmie jedynkę, stwierdzi, że wygrał izwiększy licznik zwycięstw. Wówczas przeciwnik przed swoim sprawdzeniem musi sam odjąćjedynkę, a więc nie ma już szansy stwierdzić, że zmienna łapki ma wartość jeden.Po sprawdzeniu zmiennej łapki proces l czeka, aż proces 2 także ją sprawdzi, po czymustawia ją na nowo i daje sygnał do nowej rundy. Proces 2 informuje l, że już sprawdził, poczym czeka na sygnał do nowej rundy.3.4.10 Obliczanie symbolu NewtonaInicjatywę ma tu proces P1, musi więc wskazywać procesowi P2, jak daleko może onzajść w swoich obliczeniach. Do wstrzymywania i popychania procesu P2 służy semaforPOPYCHACZ. Dostęp do wspólnej zmiennej y chroni semafor DOSTĘP. Semafor KONIECjest używany do wstrzymywania procesu P1 do chwili, gdy proces P2 całkowicie zakończyswoje obliczenia. Semafor RÓŻNEOD1 powoduje wstrzymywanie procesu P1 do chwili, gdyzmienna y osiągnie wartość różną od l (podzielenie x przez l nic nie da procesowi P2).var x,y: integer;POPYCHACZ: semaphore := 0;DOSTĘP: binary semaphore := 1;KONIEC: binary semaphore := 0;RÓŻNEOD1 : binary semaphore := 0;proces Pl;var i: integer;beginx := n;for i := n - l downto n - k -t- l do beginwhile maxint div i < x dobegin -[nadmiar>PB(RÓŻNEODl); {czeka, aż y 1}PB(DOSTĘP); {czeka na dostęp do y>x := x div y; {podzielić zawsze wolno,}y := 1; {bo P2 nie przegania Pl}VB(DOSTĘP)end;x : = x * i;V(POPYCHACZ) {P2 może pójść dalej}57

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

Saved successfully!

Ooh no, something went wrong!