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

RE: za asistenta

by Mihailo Jovkovic
nedelja, 29. april 2007 - 22:32.

Da, A nikad ne oslobađa desnu viljušku, s obzirom da postavlja
fork[right]:=false. Ali, kada B hoće da uzme levu viljušku, koja je za njega
desna viljuška filozofa A, filozof B nigde ne ispituje da li je ona zauzeta
(uopšte, ni jedan proces ne ispituje da li je leva viljuška zauzeta), samo
proverava da li je slobodan pristup viljušci, jer se ovde semaforima
određuje pristup, a ne zauzetost... Zauzetost se određuje nizom fork[]. Bar
mi tako deluje logično u ovom trenutku.

Dakle, s obzirom da proces A komandom signal(mutexfork[right]); pre nego što
počne da jede oslobodi PRISTUP svojoj desnoj viljušci (ne i samu viljušku),
proces B sa wait(mutexfork[left]); može da pristupi svojoj levoj viljušci,
koja je istovremeno desna viljuška procesa A. I onda obojica misled a imaju
viljušku.



Zaboravih zakljucak: dakle, a nikada ne oslobadja svoju desnu viljusku dok
jede, tako b ne moze da udje u situaciju koja vas je zbunila, tj da uzme
svoju levu viljusku, jer ceka na mutexfork[left], koji se oslobadja tek kad
je a zavrsio. Ok?



On 4/29/07, Milan Aleksic <milanaleksic@gmail.com> wrote:

> 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