Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.4.Wybraneproblemyprogramowaniawspółbieżnego
13
taskZi;
taskbodyZiis--treśćzadaniaZi
begin
loop
wait(s);
--sekcjakrytyczna
signal(s);
--resztazadania
endloop;
endZi;
Rysunek1060Rozwiązanieproblemusekcjikrytycznejdlanzadań
Strukturasynchronizacjijestprzytymtakasamadlaobuzadań.Przedwejściemdo
sekcjikrytycznejwykonująoneprotokółwstępny(ang.preprotocol)wpostacioperacji
wait(s),apowyjściuzsekcjiprotokółkońcowy(ang.postprotocol)wpostaciopera-
cjisignal(s).Winnych,bardziejzaawansowanychproblemachsynchronizacjistruktura
tajestpodobna,przyczymprotokoływstępnyikońcowywykonywaneprzezzadania
zwykleciągamiskładającymisięzpewnejliczbyinstrukcji.
1.4.2.Problemproducentaikonsumenta
Rozważmyproblem,wktórympewnezadanie,zwaneproducentem,produkujedane,
anastępnieprzekazujejedoprzetworzeniazadaniubędącemukonsumentemdanych.
Wprostymrozwiązaniuinterakcjimiędzyzadaniami,jaktylkokolejnaporcjadanych
zostanieutworzona,producentwysyłakonsumentowi,któryodbieraiprzetwarza.
Rozwiązanietoopierasięnakomunikacjisynchronicznej,wktórejproducentmusi
byćgotowydowysłaniadanych,akonsumentgotowydoichodebrania.Jeśliproducent
możewysłaćdane,alekonsumentniejestgotowydoichodebrania,toproducent
musipoczekaćnagotowośćodbiorcy.Możewystąpićteżsytuacjaodwrotna,wktórej
konsumentjestwstanieodebraćdane,aleproducentjeszczeichniewyprodukował.
Wobuprzypadkachalboproducent,albokonsumentjestbezczynny,choćmógłbywtym
czasiewykonaćcośpożytecznego.
Innerozwiązanieinterakcjimiędzyzadaniamiopierasięnakomunikacjiasynchro-
nicznejipoleganazastosowaniubufora,doktóregoproducentwstawiautworzone
porcjedanych,akonsumentpobierajestamtądwdogodnychdlasiebiemomentach.
Użyciebuforajestwygodne,ponieważzadanianiemusząsiębezpośredniokomuni-
kować,aponadtochwiloweszybkościwykonywaniazadańmogąsięzmieniać,choć
ichwartościśredniepowinnybyćrówne.Buforjestwistociekolejką,któramoże
byćzaimplementowananp.wpostacilistylubjednowymiarowejtablicy.Wdalszym
ciąguprzyjmującimplementacjębuforawpostacitablicy,zaprezentujemynajpierw
rozwiązanieproblemuproducentaikonsumentadlaprostszegoprzypadku,wktórym