Programowanie współbieżne i rozproszone/PWR Ćwiczenia 8

Z Studia Informatyczne
Wersja z dnia 13:03, 3 paź 2006 autorstwa Mengel (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania
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;