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.

9.3.7 Komunikacja przez pośrednikaRozwiąż zadanie 5.3.7 za pomocą operacji na kanałach w systemie Unix.9.4 RozwiązaniaRozwiązania zadań podajemy używając, abstrakcyjnej notacji. Czytelnika zachęcamy dozapisania ich również w języku C, z wykorzystaniem funkcji systemu Unix.9.4.1 Implementacja semafora typu ORDzięki możliwości wyspecyfikowania podkanału, z którego ma być pobrany komunikat,rozwiązanie tego zadania za pomocą mechanizmu komunikatów w Unixie jest bardzo proste.Wystarczy dla każdego semafora zarezerwować jeden podkanał w tym samym kanale ipodczas wykonywania operacji POR pobierać komunikat z dowolnego z tych podkanałów.Operacje P i V na pojedynczych semaforach są zaimplementowane podobnie, jak w p. 8.2.1.Parametrem operacji jest tu identyfikator podkanału odpowiadającego semaforowi, na którymta operacja ma być wykonana.type komunikat = integer;var K: channel;procedure POR(var i: integer);var k: komunikat;beginwez(K, 0, i, k)end;{komunikat - nieistotny>procedure P(s: integer);var k: komunikat;{komunikat - nieistotny}i: integer; {podkanal - nieistotny}beginwez(K, s, i, k)end;procedure V(s: integer);beginwloz(K, s, 0)end;W operacji weź w procedurze POR jako identyfikatora podkanału użyliśmy liczby 0.Dzięki temu oba semafory są wykorzystywane równomiernie. Osiągnięcie tego efektu wrozwiązaniu zadania 3.3.5 było dosyć trudne. Użycie liczby -2 powodowałoby wykorzystywaniegłównie semafora reprezentowanego przez pierwszy podkanał.Implementacja semaforów typu AND za pomocą komunikatów jest o wiele bardziejskomplikowana. Mechanizm komunikatów nie dostarcza żadnych ułatwień do synchronizacjitypu AND i dlatego musi być ona oparta na rozwiązaniu zadania 3.3.4. W razie koniecznościstosowania synchronizacji typu AND lepiej jest zatem używać semaforów unixowych.9.4.2 Implementacja monitora ogólnego239

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

Saved successfully!

Ooh no, something went wrong!