Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- with Text_Io;
- use Text_Io;
- procedure czytelnicy_i_pisarze is
- Dane : integer;
- protected type Kontroler is
- entry Poczatek_Czytania;
- procedure Koniec_Czytania;
- entry Poczatek_Pisania;
- procedure Koniec_Pisania;
- private
- Akt_Czytelnicy : integer := 0;
- Czy_Pisze : boolean := false;
- end Kontroler;
- protected body Kontroler is
- entry Poczatek_Czytania when not Czy_Pisze is
- begin
- Akt_Czytelnicy := Akt_Czytelnicy + 1;
- end Poczatek_Czytania;
- procedure Koniec_Czytania is
- begin
- Akt_Czytelnicy := Akt_Czytelnicy - 1;
- end Koniec_Czytania;
- entry Poczatek_Pisania when (Akt_Czytelnicy = 0) and (not Czy_Pisze) is
- begin
- Czy_Pisze := true;
- end Poczatek_Pisania;
- procedure Koniec_Pisania is
- begin
- Czy_Pisze := false;
- end Koniec_Pisania;
- end Kontroler;
- Data_Kontroler : Kontroler;
- task type Typ_Czytelnika is
- entry Start (Index : in integer);
- end Typ_Czytelnika;
- task body Typ_Czytelnika is
- MojIndex : integer;
- Czytana_wartosc : integer;
- begin
- accept Start (Index : in integer) do
- MojIndex := Index;
- end Start;
- loop
- Delay (Duration (MojIndex));
- Data_Kontroler.Poczatek_Czytania;
- Czytana_wartosc := Dane;
- Put_Line ("Czytelnik: " & MojIndex'img & " wartosc: " & Czytana_wartosc'img);
- Data_Kontroler.Koniec_Czytania;
- end loop;
- end Typ_Czytelnika;
- task type Typ_Pisarza is
- entry Start;
- end Typ_Pisarza;
- task body Typ_Pisarza is
- Pisana_wartosc : integer := 0;
- begin
- accept Start do
- Data_Kontroler.Poczatek_Pisania;
- Dane := Pisana_wartosc;
- Put_Line ("Pisana wartosc: " & Pisana_wartosc'img);
- Data_Kontroler.Koniec_Pisania;
- end Start;
- loop
- Delay (10.0);
- Pisana_wartosc := Pisana_wartosc + 1;
- Data_Kontroler.Poczatek_Pisania;
- Dane := Pisana_wartosc;
- Put_Line ("Pisana wartosc: " & Pisana_wartosc'img);
- Data_Kontroler.Koniec_Pisania;
- end loop;
- end Typ_Pisarza;
- Liczba_czytelnikow : constant := 4;
- type Tablica_czytelnikow is array (1..Liczba_czytelnikow) of Typ_Czytelnika;
- Czytelnicy : Tablica_czytelnikow;
- Pisarz : Typ_Pisarza;
- begin
- Pisarz.Start;
- for Index in 1..Liczba_czytelnikow loop
- Czytelnicy(Index).Start(Index);
- end loop;
- end czytelnicy_i_pisarze;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement