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.

Zauważmy, że gdy ostatni z czekających czytelników wejdzie do czytelni, procesPORTIER kończy wykonywanie pętli wewnętrznej i przechodzi do wykonywania pętli głównej.Jeśli nadal są czekający pisarze, to wejście do czytelni nowych czytelników jest zablokowane.Jednak wszyscy wpuszczeni wcześniej czytelnicy opuszczą w końcu czytelnię i będzie mógłdo niej wejść kolejny pisarz.6.2.4 Pięciu filozofówRozwiązanie z możliwością zagłodzeniaW tym rozwiązaniu synchronizacją procesów FILOZOF zajmuje się proces STÓŁ, któryprzydziela filozofom jednocześnie oba widelce. W treści procesu FILOZOF użyto atrybutuindex, którego wartością jest numer wykonującego tę treść filozofa. Tablica myślący wprocesie STÓL służy do zapamiętania, którzy filozofowie aktualnie myślą.task FILOZOF(1. .5) isend;task body FILOZOF isbeginloopmyśli;STÓŁ.BIERZE(FILOZOF'index);je;STÓŁ.ODDAJE(FILOZOF'index);end loop;end FILOZOF;task STÓŁ isentry BIERZE(1..5);entry ODDAJE(1..5);end;task body STÓŁ ismyślący: array(1..5) of Boolean := (others => true);beginloopfor i in 1..5 loopselectwhen myslacy(i) and myslacy((i+l) mod 5 + 1) =>accept BIERZE(i mod 5 + 1);myslacy(i mod 5 + 1) := false;oraccept ODDAJE(i);myslacy(i) := true;elsenull;end select;end loop;end loop;end STÓŁ;W procesie STÓŁ zastosowano tablicę pięciu wejść BIERZE i pięciu wejść ODDAJE, pooddzielnej parze dla każdego filozofa. Jest to sposób przekazania procesowi obsługującemuinformacji o tym, który z procesów potrzebuje jego usługi. Dzięki temu proces obsługującymoże zdecydować zawczasu, który proces obsłużyć. Zauważmy, że gdyby procesprzekazywał swój identyfikator jako parametr wejścia, proces obsługujący mógłby go poznać167

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

Saved successfully!

Ooh no, something went wrong!