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.

}}msgrcv(K, &c, 0, 0, 0); /*wzięcie z dowol. podkanalu*/c++;/*zwiększenie nru podkanalu*/msgsnd(K, &c, 0, 0); /*wstawienie do kanalu*/czytanie ();msgrcv(K, &c, 0, 0, 0); /*wzięcie z dowol. podkanalu*/c--;/*zmniejszenie nru podkanalu*/msgsnd(K, &c, 0, 0); /*wstawienie do kanału*/Proces PISARZ#include #include #include int K;long c; /* zamiast struktury z komunikatem */void main (void){K = msgget (1, IPC_CREAT | 0666);while (1) {wlasne_sprawy ();msgrcv(K, &c, 0, 1, 0); /* pobranie z podkanału 1 */pisanie ();msgsnd(K, &c, 0, 0); /* wstawienie do podkanału 1 */}}Rozwiązanie poprawneW tym rozwiązaniu zmienne dzielone opisujące stan systemu będą umieszczone wjednym komunikacie, co zapewni wzajemne wykluczanie przy dostępie do nich. Komunikat tenbędzie umieszczony w podkanale 1 przez proces INICJATOR.Procesy czekają na możliwość pobrania komunikatu - sygnału umożliwiającego wejściedo czytelni. Dla czytelników sygnałem jest komunikat w podkanale 2, a dla pisarzy - wpodkanale 3. Komunikaty przesyłane tymi podkanałami pełnią rolę semaforów.W celu zwiększenia czytelności kodxi zamiast identyfikatorów podkanałów będziemyużywać stałych symbolicznych - stan dla określenia podkanału 1, start_czyt dla podkanału 2 istart_pis dla podkanału 3.const C = ?;P = ?;stan = 1;start_czyt = 2;start_pis = 3;type komunikat =recordcc: integer;dc: integer;cp: integer;dp: integer;end;sygnał = integer;var K: channel;{1. czekających czytelników}{1. działających czytelników}{1. czekających pisarzy}{1. działających pisarzy}process INICJATOR;var k: komunikat;235

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

Saved successfully!

Ooh no, something went wrong!