Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.4.Wybraneproblemyprogramowaniawspółbieżnego
21
1.tasktypeczytelnik;--specyfikacjetypówzadaniowych
2.tasktypepisarz;
3.taskbodyczytelnikis--treśćtypuzadaniowegoczytelnik
4.begin
5.
loop
6.
wait(s);
7.
liczba_czytelników:=liczba_czytelników+1;
8.
ifliczba_czytelnikówl1thenwait(dostęp);endif;
9.
signal(s);
10.
ODCZYTYWANIEDANYCHZBAZY;
11.
wait(s);
12.
liczba_czytelników:=liczba_czytelników11;
13.
ifliczba_czytelnikówl0thensignal(dostęp);endif;
14.
signal(s);
15.
endloop;
16.endczytelnik;
17.taskbodypisarzis--treśćtypuzadaniowegopisarz
18.begin
19.
loop
20.
wait(dostęp);
21.
ZAPISYWANIEDANYCHWBAZIE;
22.
signal(dostęp);
23.
endloop;
24.endpisarz;
25.Czytelnicy:array(1..100)ofczytelnik;
26.Pisarze:array(1..100)ofpisarz;
Rysunek10130Rozwiązanieproblemuczytelnikówipisarzyprzyużyciusemaforów
czytelnikorazpisarz,awwierszach3–24treścitypów.Właściwedefinicjezadańjako
obiektówtypuzadaniowegowystępująwwierszach25–26,wktórychdlaprzykładu
zadeklarowano100czytelnikówi100pisarzywformietablicjednowymiarowych.
Istotnącechąrozwiązaniaproblemuczytelnikówipisarzyzrys.1.13jestzliczanie
liczbyczytelnikówaktualniekorzystającychzbazydanych.Służydotegozmienna
liczba_czytelników.Wmomenciegdypierwszyczytelnikchceuzyskaćdostępdobazy,
wykonujeoperacjęwaitnasemaforzedostęp(wiersz8).Pouzyskaniudostępuprzez
pierwszegoczytelnikanastępniczytelnicyniemusząwykonywaćtejoperacji,ponie-
ważliczbaczytelnikówkorzystającychzbazyjestdowolna.Kolejnyczytelnikodnoto-
wujetylkofaktkorzystaniazbazy,zwiększającwartośćzmiennejliczba_czytelników
(wiersz7).Czytelnicypozrealizowaniuswoichtransakcjizmniejszająwartośćzmiennej
liczba_czytelników(wiersz12).Wmomenciegdyliczbaczytelnikówjestrówna0,