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, &komunikat, 1, 1, 0);int VB (void){return ( !msgsnd (K, &komunikat, 1, IPC_NOWAIT));}Implementacja semafora dwustronnie ograniczonegoImplementacja semafora dwustronnie ograniczonego różni się od implementacjisemafora binarnego przede wszystkim tym, że w kanale znajdować się może dowolna liczbakomunikatów. Proces inicjujący musi wykonać tyle razy procedurę VD, ile ma wynosić wartośćpoczątkowa semafora. Poza tym operacja VD musi być blokująca. (Operacja PD jest takasama, jak PB w implementacji semafora binarnego.)procedure VD;beginwloz(K, 1, 0)end; {VD}9.2.2 Producenci i konsumenciRozwiązanie problemu producentów i konsumentów za pomocą mechanizmukomunikatów w Unixie jest bardzo proste, ponieważ mechanizm ten powstał specjalnie dotego typu problemów. Kanał w naturalny sposób spełnia tu rolę bufora. Należy jednakpamiętać o ograniczeniach związanych ze zwiększaniem pojemności kanału.9.2.3 Czytelnicy i pisarzeRozwiązanie z możliwością zagłodzenia pisarzyDo synchronizacji procesów użyjemy jednego pustego komunikatu. Numer podkanału,w którym znajduje się ten komunikat, zmniejszony o 1 oznacza liczbę czytelnikówznajdujących się w czytelni. Zatem pisarz może wejść do czytelni tylko wtedy, gdy komunikatjest w podkanale numer 1. Aby zapewnić wzajemne wykluczanie, pisarz wchodzący doczytelni pobiera komunikat i zwraca go wychodząc z czytelni. Czytelnik natomiast podczaswchodzenia do czytelni przekłada komunikat z jakiegoś podkanału do podkanału o numerze o1 większym, a przy wychodzeniu - do podkanału onumerze o 1 mniejszym.const C = ?;P = ?;type komunikat = integer;var K: channel;process INICJATOR;beginwloz(K, 1, 0) {0 czytelników, czyli wstawienie do podkanału 1}end; {INICJATOR}processCZYTELNIK(i: l..C);233

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

Saved successfully!

Ooh no, something went wrong!