12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

dopiero w trakcie spotkania, a byloby to już za późno na podejmowanie decyzji o tym, czymożna w danej chwili spotykać się z tym procesem, czy też nie.Rozwiązanie to zaproponowane w artykule [WeLi81], oprócz tego, że nie wykluczazagłodzenia, ma jeszcze tę wadę, iż wymaga aktywnego czekania od procesu STÓL. Musi onciągle sprawdzać, czy jakiś filozof może jeść (stąd klauzula else null). Aby uniknąć aktywnegoczekania trzeba by pętlę for zastąpić instrukcjąselectwhen myślący(l) and myslacy(3) =>accept BIERZE(2);myslacy(2) := false;orwhen myslacy(2) and myslacy(4) =>accept BIERZE(3);myslacy(3) := false;orwhen myslacy(3) and myslacy(5) =>accept BIERZE(4);myslacy(4) := false;orwhen myslacy(4) and myślący(l) =>accept BIERZE(5);myslacy(5) := false;orwhen myslacy(5) and myslacy(2) =>accept BIERZE(1);myślący(l) := false;oraccept ODDAJE(1); myślący(l) := true;oraccept ODDAJE(2); myslacy(2) := true;oraccept ODDAJE(3); myslacy(3) := true;oraccept ODDAJE(4); myslacy(4) := true;oraccept ODDAJE(5); myslacy(5) := true;end select;co, jak widać, nie jest programowaniem zbyt eleganckim, a ponadto trudnym do realizacji,gdyby filozofów bylo więcej. Mechanizm tablicowania dozorów w CSP zastąpiono w Adziemechanizmem tablicowania wejść, nie ma już jednak w tym języku możliwości jednoczesnegowstrzymania procesu w oczekiwaniu na spotkanie w którejkolwiek z odpowiednich instrukcjiaccept.Rozwiązanie poprawneNastępujące rozwiązanie jest zapisem w języku Ada rozwiązania z rozdz. 3. Każdyproces WIDELEC pelni rolę semafora binarnego (por. p. 6.2.1). Proces LOKAJ jest realizacjąw Adzie semafora ogólnego z wartością początkową 4.task LOKAJ isentry WEJŚCIE;entry WYJŚCIE;end;task body LOKAJ iswśrodku: Integer := 4;168

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!