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.

monitor OBSŁUGA.DRUKAREK;const N = ?;var drukuje: array[1..3] of O..N; {nr drukującego procesu}ZAJĘTY: condition;export procedure ZAJMIJ(i: 1..N; var dr: 1..3);var j: integer;beginif drukuje[1] * drukuje [2] * drukuje[3]then wait(ZAJĘTY);{wszystkie drukują}j:=l;{szukam wolnej}while drukuje[j] O O doj := j + 1;drukuje[j] := i;dr := jend;export procedure ZWOLNIJ(dr: 1..3);begindrukuje[dr] := O;signal(ZAJĘTY)end;begindrukuje[1]:= 0;drukuje[2]:= O;drukuje[3]:= Oend; {OBSLUGA_DRUKAREK}{nikt nie drukuje}4.4.8 LotniskowiecW tym rozwiązaniu rolę semaforów PAS_DLA_START i PAS_DLA_LĄD z rozwiązania3.4.11 pełnią zmienne typu condition DO_STARTU i DO_LĄDOWANIA. Funkcję semaforaDOSTĘP spełnia sam monitor LOTNISKOWIEC. Nie są też potrzebne liczniki chce_start ichce_ląd, wystarczy w tym przypadku sprawdzenie, czy odpowiednia kolejka jest pusta. Wartozauważyć, że procedura zwolni j _pas nie jest dostępna na zewnątrz monitora.monitor LOTNISKOWIEC;const k = ?;N = ?;var na_lotniskowcu: integer;DO.STARTU, DO.LĄDOWANIA: condition;wolny: boolean;procedure zwolnij_pas;beginif na_lotniskowcu < k thenif not empty(DO_LADOWANIA) thensignal(DO_LADOWANIA)elsesignal(DO.STARTU)elseif not empty(DO_STARTU) thensignal(DO.STARTU)elseif (na_lotniskowcu < N) then91

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

Saved successfully!

Ooh no, something went wrong!