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.

end;PB(KONIEC); {trzeba czekać na P2>x := x div yend;proces P2;var i: integer;beginy := 1;for i := 2 to k do beginP(POPYCHACZ); {czeka na pozwolenie od Pl}PB(DOSTĘP);if y = l then YB(RÓŻNEODl); {teraz będzie y 1}y := y * i;VB(DOSTĘP)end;VB(KONIEC)end;Jeśli już pierwsze mnożenie daje nadmiar, opisana tu metoda obliczania symboluNewtona nie przyniesie sukcesu. Zauważmy, że jeśli maxint div (n-1) < n, to oba procesyzablokują się wzajemnie, gdyż P l będzie czekał na podniesienie semafora RÓŻNEOD1, comoże zrobić tylko P2, a P2 będzie czekał na podniesienie semafora POPYCHACZ, co możezrobić tylko Pl. Bez żadnej szkody można jednak odwrócić pętlę w procesie P l i rozpoczynaćobliczanie licznika od n-k+1 w kierunku n, a wtedy pierwszym mnożeniem będzie (n-k+l)*(nk+2)zamiast n*(n-l). Jeśli i to mnożenie daje od razu nadmiar, trzeba użyć innej metodyobliczania dwumianu Newtona.3.4.11 LotniskowiecWystępują tu dwie grupy procesów (samolotów) korzystających z jednego wspólnegozasobu (pasa startowego). Po skorzystaniu z zasobu proces zmienia swoją grupę. Priorytetgrupy zależy od jej aktualnej liczebności. Zmienna wolny określa stan pasa startowego.Semafor PAS_DLA_START służy do wstrzymywania samolotów startujących a zmiennachce_start wskazuje ich liczbę. Semafor PAS_DLA_LĄD jest używany do wstrzymywaniasamolotów lądujących a zmienna chce_ląd wskazuje ich liczbę. Semafor DOSTĘP chroniwspólne zmienne. Zmienna na_lotniskowcu określa liczbą samolotów na lotniskowcu.const K = ?; {liczba graniczna}N = ?; {pojemność pokładu}M = ?; {liczba wszystkich samolotów}var na.lotniskowcu: integer := ?;chce_start: integer := 0;chce.ląd: integer := 0;wolny: boolean := true;DOSTĘP: binary semaphore := 1;PAS_DLA_START: binary semaphore := 0;PAS_DLA_LĄD: binary semaphore := 0;process SAMOLOTU: 1..M);procedurę zwolnij_pas;beginif na_lotniskowcu < K then beginif chce_ląd > O then beginchce_ląd := chce_ląd - 1;VB(PAS_DLA_LĄD)58

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

Saved successfully!

Ooh no, something went wrong!