«« ( Date ) »» // «« ( Thread ) »» // drs - 2007

Re: za asistenta

by Milos Ilic
petak, 04. maj 2007 - 23:36.

Izvinjavam se unapred, ako ovaj mejl dobijate po drugi put. Kod prvog slanja
sam imao nekih problema.


Nisam dobro procitao ono sto si napisao. Mislio sam da si napisao da
dodje samo jedan atom kiseonika, a za njim 4 atoma vodonika. Onda, po onome
sto si napisao, sledi da onaj drugi atom vodonika odblokira prvi atom
kiseonika, koji nesmetano prodje barijeru, potom ne prodje 1. ili 2. ili oba
H ( jer ne smemo nista da pretpostavljamo o vremenima izvrsavanja
procedura), 3. i 4. H odblokiraju onaj 2. atom O, i tako u nedogled.

Da li bi moglo da se popravi resenje sa ovim?

procedure Hydrogen(i:integer);
begin
wait(hydroSem);
wait(hydroMutex);
count:= count + 1;
if(count =2) then
begin
signal(oxySem);
signal(hydroSem2); // obavesti onog prvog
count:= 0;
bond(i); // posto te je O sacekao, a ti si drugi, nema
razloga da ne prodjes i prolazis odmah, nedeljivo
signal(hydroMutex); // oslobodi za sledece H
end; else begin // ako si prvi

signal(hydroMutex);
wait(Mutexpomocni); // onaj prvi H ce proci, 3. ce se
zaglaviti
wait(hydroSem2); // onaj prvi H ceka potvrdu od
drugog
bond(i); // i nedeljivo prelazi
barijeru
signal(Mutexpomocni); // oslobodi treci H sto/ako ceka.

end;
end;



Da li ovo ISTA valja? :) Nadam se da nisam nesto lupio

Nego, dok sam kucao ovo, postalo mi je nejasno da li moze da neka
promenljiva/procedura/... malo bude u kriticnoj sekciji malo ne bude,
zavisno od procedure do procedure. U materijalim sa vezbi je bond(i) u O u
krit. sek. a u H nije.