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.

8.2.2 Producenci i konsumenciIdea przedstawionego rozwiązania jest taka sama jak rozwiązania za pomocąklasycznych semaforów. Różnice polegają na zapisaniu w odrębnych procedurach kodusłużącego do synchronizacji. Poza tym zmienne J i K wskazujące element, do któregoproducent ma wstawiać porcję, i element, z którego konsument ma ją pobierać, sązaimplementowane jako semafory. W przykładzie 3.2.2 były to bowiem zmienne globalne i wsystemie Unix musiałyby być umieszczone we wspólnej pamięci. Oczywiście bufor musiznajdować się we wspólnej pamięci, ale same operacje wstawiania do bufora i pobierania zniego nie są dla nas interesujące, zajimijemy się tu bowiem tylko synchronizacją procesów.const N = ?;LP = ?;LK = ?;var bufor: array[l..N] of porcja;WOLNE: semaphore := N;PEŁNE: semaphore := 0;J: semaphore := 1;K: semaphore := 1;CHRON_J: semaphore := 1;CHRON_K: semaphore := 1;function pocz_prod: integer;begin[ P(WOLNE), P(CHRON_J) ];pocz_prod := wart(J)end;procedure kon_prod;beginif wart(J) = N then J := 1else V(J); {J := (J + 1) mod N}[ V(CHRON_J), V(PELNE) ]end;function pocz_kons: integer;beginC P(PELNE), P(CHRON.K) ];pocz_kons := wart(K)end;procedure kon_kons;beginif wart(K)=N then K := 1 else V(K); {K := (K + 1) mod N>[ V(CHRON_K), V(WOLNE) ]end;process PRODUCENT (i: l..LP);var p: porcja;beginwhile true do beginprodukuj(p);bufor[pocz_prod] := p;kon_prodendend;process KONSUMENT (i: l..LK);var p: porcja;212

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

Saved successfully!

Ooh no, something went wrong!