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.
Dosynchronizacjiwmonitorzestosowanezmiennewarunkó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ówwykonywaneoperacje
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
operacjisignalwznowienieprocesuzkolejki,wprzypadkugdykolejkaniejest
pusta.Jeślikolejkajestpusta,towykonanieoperacjisignalniepowodujeżadnych
działań.Oznaczato,żewielokrotnewykonaniaoperacjisignalprzypustejkolejcenie
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),akonsumentwcelupobraniadanychprocedurępo-
14Ztegowzględuoperacjenazmiennychwarunkówczasamioznaczaneinaczej,np.waitCoraz
signalC.