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.

Instytucie Informatyki Uniwersytetu Warszawskiego. Co prawda z wymienionych tu językównajbardziej popularnym na komputerach typu IBM PC jest język Modula 2. Monitor nie jest wnim jednak wyróżnioną konstrukcją programową, a do tworzenia procesów korzystających zmonitora stosuje się mechanizm niskopoziomowy. Te cechy powodują, że nie jest to dobryjęzyk do zapisywania przykładów zastosowania monitorów.4.1.2 OgraniczeniaKażdej zmiennej typu condition odpowiada jedna kolejka, w której czekają wstrzymaneprocesy. Zwykle procesy są wstrzymywane, gdy nie jest spełniony jakiś warunek. Proces,który zmienia stan monitora, tak że warunek jest spełniony, wykonuje operację signal iwznawia, pierwszy ze wstrzymanych procesów. Są jednak przypadki, gdy okazuje się, że tenmechanizm jest zbyt słaby, by zwięźle zapisać rozwiązanie zadania,. Na przykład, gdy każdy zprocesów oczekuje na inną wartość pewnej zmiennej, należałoby mieć dla każdej z tychwartości oddzielną kolejkę, co czasami może okazać się niewykonalne. W takiej sytuacjitrzeba wszystkie procesy umieścić w jednej kolejce, ale jest potrzebny wówczas jakiś sposóbstwierdzania, na co każdy z nich czeka.Jest kilka rozwiązań tego problemu. Można z kolejką procesów związać dynamicznąstrukturę, w której będą pamiętane potrzeby każdego z nich. Wtedy jednak programista musiwziąć na siebie cały wysiłek zorganizowania takiej dodatkowej struktury. Rozwiązaniem, którelepiej wykorzystuje możliwości monitora, jest podzielenie kolejki na dwie „podkolejki". Wpierwszej będzie czekał tylko jeden proces, w drugiej pozostałe. Przechodząc z kolejki dokolejki, proces będzie w zmiennej pomocniczej pozostawiał informację, na jaki warunek czeka.W tym rozwiązaniu procesy są wznawiane w takiej samej kolejności, w jakiej byływstrzymywane. To podejście zastosowaliśmy w rozwiązaniach zadań 4.4.3 i 4.4.16.Jeśli kolejność procesów czekających nie jest istotna, można na nie przerzucićobowiązek sprawdzenia stanu monitora. Proces zmieniający stan monitora będzie wówczaszawsze zwalniał proces czekający, a ten sam sprawdzi, czy warunek, na który czeka, jest jużspełniony. Jeśli nie będzie spełniony, zwolni kolejny czekający proces, by też mógł sprawdzićwarunek, a sam wykona znowu operację wait. W ten sposób wszystkie czekające procesybędą wznowione i wszystkie będą następnie wstrzymane (w odwrotnej kolejności niż byływznowione), z wyjątkiem być może jednego, który stwierdzi, że oczekiwany warunek jest jużspełniony. Tego typu podejście zastosowaliśmy w rozwiązaniu zadania 4.4.11.4.1.3 PascaLCPascaLC [Kurp87] powstał w Instytucie Informatyki Uniwersytetu Warszawskiego. Jestto podzbiór języka Pascal, rozszerzony o instrukcję wykonania współbieżnego cobegin coendoraz o możliwość deklarowania monitorów i procesów w taki sam sposób, w jaki deklaruje sięfunkcje i procedury.Deklaracje udostępnianych procedur poprzedza się słowem kluczowym export.Wewnątrz procesów do procedur monitorowych można odwoływać się kwalifikując nazwęprocedury nazwą zawierającego ją monitora.Nasz przykładowy monitor M zawierający zmienną z oraz udostępniający procedury Pl,P2, wewnątrz których są wykonywane operacje czekania i zwalniania na zmiennej W typucondition, ma w Pascalu.C następującą postać:monitor M;62

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

Saved successfully!

Ooh no, something went wrong!