Programowanie współbieżne i rozproszone/PWR Ćwiczenia 8: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
; Zadanie | ; Zadanie | ||
Zaimplementuj semafor dwustronnie ograniczony | |||
var S : semaphore := K; {wartosc poczatkowa, 0 <= K <= N} | var S : semaphore := K; {wartosc poczatkowa, 0 <= K <= N} | ||
Linia 16: | Linia 16: | ||
; Zadanie | ; Zadanie | ||
Zaimplementuj semafor uogólniony. Zwróć uwagę na zachowanie własności żywotności. | |||
procedure PG(n : integer); {operacja P na semaforze uogolnionym} | procedure PG(n : integer); {operacja P na semaforze uogolnionym} | ||
Linia 43: | Linia 43: | ||
V(mutex); | V(mutex); | ||
end; | end; | ||
; Zadanie | |||
Rozwiąz problem czytelników i pisarzy. | |||
var iluczyta, czekaczyt, ilupisze, czekapis : integer := (0, 0, 0, 0); | |||
mutex : binary semaphore := 1; | |||
Czytelnicy : semaphore := 0; | |||
Pisarze : semaphore := 0; | |||
process Czytelnik; | |||
begin | |||
while true do begin | |||
wlasne_sprawy; | |||
P(Ochrona); | |||
jest_cz:= jest_cz + 1; {licznik wszystkich czytelnikow} | |||
if jest_p = 0 then begin {nie ma pisarza, mozna czytac} | |||
akt_cz:= akt_cz + 1; {licznik czytelnikow w czytelni} | |||
V(Ochrona) | |||
end | |||
else begin {sa pisarze ... } | |||
V(Ochrona); | |||
P(Czytelnicy) { ... czytelnicy czekaja} | |||
end; | |||
CZYTAM; | |||
P(Ochrona); | |||
akt_cz:= akt_cz - 1; jest_cz:= jest_cz - 1; | |||
if akt_cz = 0 then {wychodzi ostatni czytelnik} | |||
while jest_p > akt_p do begin {wpuszczamy wszystkich pisarzy} | |||
akt_p:= akt_p + 1; {zaznaczajac, ze sa oni aktywni} | |||
V(Pisarze); | |||
end; | |||
V(Ochrona) | |||
end | |||
end; |
Wersja z 13:05, 3 paź 2006
- Zadanie
Zaimplementuj semafor dwustronnie ograniczony
var S : semaphore := K; {wartosc poczatkowa, 0 <= K <= N} T : semaphore := N - K;
procedure PD; {operacja P na semaforze dwustronnie ograniczonym} begin P(S); V(T); end;
procedure VD; {operacja V na semaforze dwustronnie ograniczonym} begin P(T); V(S); end;
- Zadanie
Zaimplementuj semafor uogólniony. Zwróć uwagę na zachowanie własności żywotności.
procedure PG(n : integer); {operacja P na semaforze uogolnionym} begin P(pierwszy); P(mutex); if ile < n then begin naileczeka := n; V(mutex); P(czekaj); naileczeka := 0; end; ile := ile - n; V(mutex); V(pierwszy) end;
procedure VG(n : integer); {operacja V na semaforze uogolnionym} begin P(mutex); ile:= ile + n; if (naileczeka > 0) and (ile >= naileczeka) then V(czekaj) else V(mutex); end;
- Zadanie
Rozwiąz problem czytelników i pisarzy.
var iluczyta, czekaczyt, ilupisze, czekapis : integer := (0, 0, 0, 0); mutex : binary semaphore := 1; Czytelnicy : semaphore := 0; Pisarze : semaphore := 0;
process Czytelnik; begin
while true do begin wlasne_sprawy; P(Ochrona); jest_cz:= jest_cz + 1; {licznik wszystkich czytelnikow} if jest_p = 0 then begin {nie ma pisarza, mozna czytac} akt_cz:= akt_cz + 1; {licznik czytelnikow w czytelni} V(Ochrona) end else begin {sa pisarze ... } V(Ochrona); P(Czytelnicy) { ... czytelnicy czekaja} end; CZYTAM; P(Ochrona); akt_cz:= akt_cz - 1; jest_cz:= jest_cz - 1; if akt_cz = 0 then {wychodzi ostatni czytelnik} while jest_p > akt_p do begin {wpuszczamy wszystkich pisarzy} akt_p:= akt_p + 1; {zaznaczajac, ze sa oni aktywni} V(Pisarze); end; V(Ochrona) end
end;