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.

endend;process S;var pl,p2,p3: porcja;m: 1..W1 := 1;n: 1..W2 := 0;beginwhile true do beginP(PEŁNEl);P(PELNEl); {czeka na 2 pełne elementy}pl := b1[m];m := m mod W1 + l;p2 := b1[m];m := m mod W1 + l;V(WOLNE1); {sygnalizuje opróżnienie}V(WOLNE1);przetwórz(p1,p2,p3);if n = O then PB(WOLNE2); {czeka na wolny b2}n := n + 1;b2[n] := p3;if n = W2 then beginVB(PELNE2);n := Oendendend;process K;beginwhile true do beginPB(PELNE2);konsumuj(b2);VB(WOLNE2)endend;{sygnalizuje wypełnienie}Zmienna j wskazująca miejsce, w które ma wkładać proces P, jest zmienną globalnąchronioną przez semafor CHROŃ_J, gdyż korzystają z niej wszystkie procesy P. Zmienna mwskazująca miejsce, z którego wyjmuje proces S, jest lokalna w tym procesie.3.4.7 Linia produkcyjnaJest to problem podobny do problemu producenta i konsumenta. Każdy proces jest tukonsumentem dla poprzednika i producentem dla następnika.Można sobie wyobrazić, że procesy „biegają" naokoło bufora cyklicznego w tym samymkierunku w kolejności wzrastania ich numerów, ale nie mogą się nawzajem przeganiać.Wartości semaforów określają dystans między procesami. Jeśli dystans zmaleje do zera, toproces o wyższym numerze musi być wstrzymany, by nie przegonić procesu o niższymnumerze. Początkowo wszystkie procesy są wstrzymane przy pierwszej porcji bufora, ajedynie proces P(0) ma do pokonania odległość M, by dogonić proces P(N-1).const N = ?; {liczba procesów}M = ?; {rozmiar bufora}var bufor: array[0..M-l] of porcja;S: array[0..N-l] of semaphore := (M, (N-l)*0);55

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

Saved successfully!

Ooh no, something went wrong!