[ Pobierz całość w formacie PDF ]
.StartCzytanie(.);-- czytaCzytelnia.StopCzytanie;-- sekcja lokalnaend loop;end Czytelnik;task Pisarz;task body Pisarz isbeginloop-- sekcja lokalnaCzytelnia.Pisanie(.);end loop;end Pisarz;8.3.3.MonitorySynchronizacj zada pisarzy i czytelników mo na efektywnie zaimplementowaw oparciu o mechanizmy wy szego poziomu ni semafory, takie jak monitory i obiektychronione.Wynika to st d, e tak jak w przypadku spotka , w tych mechanizmachistniej metody umo liwiaj ce zawieszenie danego zbioru procesów w oczekiwaniuna spe nienie pewnego warunku.W przypadku monitorów s to zmienne warunkoweoraz metody wait i signal operuj ce na tych zmiennych.monitor Czytelnia isLczyt, Lpisz: Integer := 0; -- liczba czytelników i pisarzy w czytelniCzytanie, Pisanie: warunek;procedure WchodziCzytelik isbeginif Lpisz > 0 or not empty(Pisanie) thenwait(Czytanie);end if;Lczyt := Lczyt + 1;signal(Czytanie);end WchodziCzytelik;procedure WychodziCzytelnik isKup ksi k Poleć ksi k 256 Programowanie wspó bie ne.Systemy czasu rzeczywistegobeginLczyt := Lczyt - 1;if Lczyt = 0 thensignal(Pisanie);end if;end WychodziCzytelnik;procedure Pisze isbeginif Lczyt > 0 or Lpisz > 0 thenwait(Pisanie);end if;Lpisz := 1;-- piszeLpisz := 0;if not empty(Czytanie) then signal(Czytanie);else signal(Pisanie);end if;end Pisze;end Czytelnia;task Czytelnik;task body Czytelnik isbeginloopCzytelnia.WchodziCzytelnik;-- czytaCzytelnia.WychodziCzytelnik;-- sekcja lokalnaend loop;end Czytelnik;task Pisarz;task body Pisarz isbeginloop-- sekcja lokalnaCzytelnia.Pisze;end loop;end Pisarz;W powy szym rozwi zaniu dwie zmienne warunkowe pisanie i czytanie okre laj stanczytelni  to, czy jest ona zaj ta przez czytelników, czy przez pisarza.Je eli czytelnicynie mog wej do czytelni, to s zawieszani w kolejce warunku czytanie (wykonujinstrukcj wait(czytanie)) i reaktywowani przez wychodz cego z czytelni pisarza in-strukcj signal(czytanie).Analogicznie, je eli czytelnicy przebywaj w czytelni, to pi-sarz jest zawieszany w kolejce warunku pisanie i wznawiany (signal(Pisanie)) przezostatniego czytelnika wychodz cego z czytelni.8.3.4.Obiekty chronioneJeszcze bardziej naturalne i przede wszystkim efektywniejsze rozwi zanie (ze wzgl duna liczb operacji synchronizuj cych dost p do czytelni) zapewnia obiekt chroniony.package Czytelnicy_Pisarze isprocedure Czytaj(I: out Typ);procedure Zapisz(I: Typ);Kup ksi k Poleć ksi k Rozdzia 8.Problemy programowania wspó bie nego 257end Czytelnicy_Pisarze;package body Czytelnicy_Pisarze isprocedure Czytaj_Plik(I: out Typ) isbegin.end Czytaj_Plik;procedure Zapisz_Plik(I: Typ) isbegin.end Zapisz_Plik;protected Kontrola isentry Zacznij_Czytac;procedure Zakoncz_Czytac;entry Zacznij_Zapisywac;procedure Zakoncz_Zapisywac;privateCzytelnicy: Natural := 0;Pisarze: Boolean := False;end Kontrola;procedure Czytaj(I: out Typ) isbeginKontrola.Zacznij_Czytac;Czytaj_Plik(I);Kontrola.Zakoncz_Czytac;end Czytaj;procedure Zapisz(I: Typ) isbeginKontrola.Zacznij_Zapisywac;Zapisz_Plik(I);Kontrola.Zakoncz_Zapisywac;end Zapisz;protected body Kontrola isentry Zacznij_Czytac when not Pisarze andZacznij_Zapisywac'Count = 0 isbeginCzytelnicy := Czytelnicy + 1;end Zacznij_Czytac;procedure Zakoncz_Czytac isbeginCzytelnicy := Czytelnicy - 1;end Zakoncz_Czytac;entry Zacznij_Zapisywac when not Pisarze and Czytelnicy = 0 isbeginPisarze := True;end Zacznij_Zapisywac;procedure Zakoncz_Zapisywac isbeginPisarze := False;end Zakoncz_Zapisywac;end Kontrola;end Czytelnicy_Pisarze;Kup ksi k Poleć ksi k 258 Programowanie wspó bie ne.Systemy czasu rzeczywistegoBariery dla wej wykluczaj jednoczesne przebywanie w czytelni pisarzy i czytelników [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • drakonia.opx.pl
  • Linki