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

Re: za asistenta

by Milan Aleksic
nedelja, 29. april 2007 - 20:32.

Da probam ja da odgovorim, pa ako ne uspem nadam se da ce asistent.
Ako je a poceo da jede, to znaci da je uspeo da uzme obe viljuske.
Posto je osigurano da se uvek uzima leva pa desna viljuska, ne moze
doci do loka. Tako, kada b ogladni moze da se desi jedna od tri
stvari:
1. a jede, sto znaci da je u fork false za a.-ovu desnu viljusku, pa b
ceka na mutexfork[b.left]
2. A ne jede, b krece na desnu viljusku, ali posto neki c desno od b
jede b mora da vrati levu vilj. i da resetuje mjuteks na toj vilj.
Ceka ponovo mjuteks za levu vilj itd
3. Ni a ni c ne jedu pa b lagano uzima obe viljuske i jede,
onemogucavajuci a i c da jedu dok on ne zavrsi, po prve dve tacke

nadam se da nisam odmogao :-), poz, Milan

On 4/29/07, Momir Djekic <zima.dolazi@gmail.com> wrote:
Postovani,
imam za vas jedno pitanje u vezi Dining Philosophers problem, resenja broj 4
i 5 iz knjige Ikodinovic/Jovanovic.
U pitanju su resenja koja omogucuju vracanje viljuske na stol ukoliko ona
nije na njemu (realizovano pomocu fork[] koje dobia vrednosti true ako je
viljuska na stolu i false ukoliko nije)
Kod je:
procedure Philosopher(i:0..N-1);
var left, right, first, second:0..N-1;
begin
left:=i;
right:=(i+1)modN;
while(true) do begin
think;
wait(mutexfork[left]);
fork[left]:=false;
signal(mutexfork[left]);
pause(random);
wait(mutexfork[right]);
if (fork[right]) then begin
fork[right]:=false;
signal(mutexfork[right]);
eat;
dalje vracamo viljusku...


Pitanje je:
Filozof B sedi desno od filozofa A. Filozof A uzima levu, uzima desnu i
krece da jede. Filozof B pocinje sa radom i posto je mutexfork njegove leve
viljuske (a desne filozofa A) slobodan on dobija pravo pristupa, proglasava
da je viljuska uzeta sa stola... i sada i jedan i drugi imaju viljusku.
Sta previdjamo?

Zahvalni
Momir i Mihailo



--
Milan Aleksić
email: milan.aleksic@gmail.com
web: http://milanaleksic.co.sr
ICQ: 53177884