12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

end;wait(KOLEJKA.AB);end;wolneA := wolneA - 1;wolneB := wolneB - 1;if not empty(kolejka_AB) then beginmamA := wolneA > 0; {rezerwacja zasobów}mamB := wolneB > Oendendendend; {ŻĄDANIE}{dla następnego w kolejce}export procedure ZWOLNIENIE(typ: typ.zasobu) ;begincase typ ofA: beginwolneA := wolneA + 1;if not empty(KOLEJKA_AB) and not mamA thenif mamB then {miał B, brakowało A}signal(KOLEJKA_AB) {może brać oba}else {nie miał A ani B}mamA := true {już ma A}else{A nie potrzebny 3. gr.}signal(KOLEJKA_A) {mogą go brać z l.gr.}end;B: beginwolneB := wolneB + 1;if not empty(KOLEJKA_AB) and not mamB thenif mamA then {miał A, brakowało B}signal(KOLEJKA_AB) {może brać oba}else {nie miał A ani B}mamB := true {już ma B}else{B nie potrzebny 3. gr.}signal(KOLEJKA_B) {mogą go brać z 2. gr.}end;AB: beginwolneA := wolneA + 1;wolneB := wolneB + 1;if empty(KOLEJKA_A) and empty(KOLEJKA_B) thensignal(KOLEJKA_AB)else begin{pojedyncze mają priorytet}signal(KOLEJKA_A);signal(KOLEJKA_B)endendendend; {ZWOLNIENIE}beginwolneA := M;wolneB := N;mamA := false;mamB := falseend; {AiB}Warto zwrócić uwagę na fakt, że zadanie to jest innym sformułowaniem problemujednoczesnej operacji opuszczania dwóch semaforów Przedstawione tu rozwiązanie jestznacznie prostsze niż rozwiązanie tego problemu za pomocą semaforów (por. 3.4.4). Nietrzeba dbać o wzajemne wykluczanie przy dostępie do wspólnych zmiennych zapewnia to sam82

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

Saved successfully!

Ooh no, something went wrong!