Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.4.Wybraneproblemyprogramowaniawspółbieżnego
23
zapewniaimplementacjajęzykaprogramowania,wktórymjestmożliweużywaniemo-
nitorów.
Dosynchronizacjiwmonitorzesąstosowanezmiennewarunków(ang.condi-
tionvariables)orazoperacjeczekaniawaitisygnalizowaniasignaldziałającenatych
zmiennych.Jeśliwprocedurzemonitoraniemożnakontynuowaćdziałaniawskutek
niespełnieniajakiegośwarunku,towykonujesięoperacjęwait(a)nazmiennejaod-
powiadającejtemuwarunkowi.Wykonanieoperacjiwait(a)powodujewstrzymanie
procesuiskierowaniegodokolejkiFIFOzwiązanejzezmiennąa.Wstrzymanyproces
przestajebyćaktywnyinieblokujedostępudomonitora.Pozwalatoinnemuprocesowi
wejśćdomonitoraiwykonaćdziałania,wwynikuktórychwarunekazostaniespełniony.
Procestenmożewówczaszasygnalizowaćspełnieniewarunkuprzezwykonanieoperacji
signal(a),którapowodujewznowieniewykonywaniaprocesuczekającegowkolejce
związanejzezmiennąa.
Zewznawianiemprocesuzkolejkijestpewnatrudnośćwynikającaztego,że
wmonitorzemożebyćaktywnytylkojedenproces.Aktywnymprocesemjestproces
sygnalizujący,więczarazpowykonaniuoperacjisignalniemożebyćrównieżaktywny
proceswznawiany.Możetonastąpićdopierowtedy,gdyprocessygnalizującyopuści
monitor.Ponieważmiędzysygnalizowaniemawyjściemzmonitoraprocesmożewyko-
naćdalszeoperacje,trzebamiećpewność,żewmomencieopuszczaniamonitorasygna-
lizowanywcześniejwarunekjestnadalspełniony.Dlategozwyklezalecasię,byoperacja
sygnalizowaniabyłaostatniąoperacjąwykonywanąwprocedurzemonitora.Ponadto,
abyoperacjenazmiennychwarunkówprzebiegałypoprawnie,zarazpoopuszczeniu
monitoraprzezprocessygnalizującymusibyćaktywowanyproceszkolejkizwiązanej
zezmiennąwarunku.Oznaczato,żemaonwyższypriorytetniżprocesyczekającena
wejściedomonitora.
Jakwspomnieliśmywcześniej,nazmiennychwarunkówwykonywanesąoperacje
waitisignal.Działająoneinaczej14niżoperacjeotychsamychnazwachdziałającena
semaforach(por.s.10).Zmiennewarunkówmająbowieminnycharakterniżsemafory,
którychskładowecałkowiteumożliwiajązliczaniewykonanychnasemaforachoperacji
waitisignal.Zmiennymwarunkównieprzypisujesięwartości.Wykonanieprzezproces
operacjiwaitnazmiennejwarunkupowodujeskierowanieprocesudokolejki,natomiast
operacjisignal—wznowienieprocesuzkolejki,wprzypadkugdykolejkaniejest
pusta.Jeślikolejkajestpusta,towykonanieoperacjisignalniepowodujeżadnych
działań.Oznaczato,żewielokrotnewykonaniaoperacjisignalprzypustejkolejceniesą
odnotowywane,jaktosiędziejewprzypadkusemafora.Niestanowitoprzeszkodyprzy
rozwiązywaniuproblemówsynchronizacji,ponieważwraziekoniecznościwykonania
temogąbyćzliczaneprzezodpowiedniezmiennezadeklarowanewmonitorze.
Narysunku1.14jestprzedstawionerozwiązanieproblemuproducentaikonsumenta
zużyciemmonitora.Producent,byumieścićdanewbuforze,wywołujeprocedurę
monitorawstaw(wiersz8),akonsumentwcelupobraniadanych—procedurępo-
14Ztegowzględuoperacjenazmiennychwarunkówsączasamioznaczaneinaczej,np.waitCoraz
signalC.