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.

W przypadku semafora ogólnego do tego, by proces wykonał procedurę P bezwstrzymywania, wystarczy, aby wartość semafora była większa od zera. W procedurzePSINGLE sprawdza się dodatkowo, czy w ten sposób nie pozbawi się priorytetu procesówczekających na PAND. PSINGLE można zatem wykonać bez wstrzymywania, gdy dodatkowowartość semafora przekracza liczbę procesów oczekujących na semaforze A (zmniejszając tęwartość na pewno nie przeszkodzi się procesom czekającym na PAND) lub gdy ostatniowykonywaną operacją na danym semaforze była operacja PAND (wtedy PSINGLE mapriorytet).const M = ?; {wartość początkowa S[0]}N = ?; {wartość początkowa S[l]}type nrsem = 0..l;var A: semaphore := 0; {do wstrzymywania procesówwykonujących PAND>S: array[nrsem] of semaphore := (0,0);{oraz wykonujących PSINGLE}W: binary semaphore := 1; {do wzajemnego wykluczania}Is: array[nrsem] of integer := (M,N); {wartości semaforów}ca: integer := 0; {liczba procesów czekających na oba semafory oraz}es: array[nrsem] of integer := (0,0); {na pojedyncze semafory}pój: array[nrsem] of boolean := (true.true);{czy ostatnio wykonano PSINGLE}procedure PSINGLE (i: nrsem);beginPB(W);if (IsCi] > 0) and ((Is[i] > ca) or not pój [i]) thenbegin{Is[i] przewyższa potrzeby czekających na PAND lub ostatniona semaforze i nie było PSINGLE}Is[i] := Is[i] - 1;pój [i] := true;VB(W)end else begines [i] := es [i] + 1;VB(W);P(S[i])endend;{trzeba czekać na S [i]}procedure PAND;beginPB(W);if ls[0] * ls[l] > O then begin{oba semafory podniesione}Is[O] := ls[0] - 1;ls[l] := Is[i] - 1;pój [O] := false;pój [l] := false;VB(W)endelse begin {trzeba czekać na A}ca := ca + 1;VB(W);P(A)endend; {PAND}procedure dajSINGLE (i: nrsem);50

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

Saved successfully!

Ooh no, something went wrong!