The bus problem - komentari
Postovani,
citajuci predlozeno resenje pomenutog problema naisao sam na nekoliko
nedoumica:
1. Da li se to meni cini ili ja vidim deadlock: na stanici ceka 10 putnika.
Na stanicu dolazi bus koji ima 3 slobodna mesta. Javlja da je dosao, a zatim
ceka da broj putnika na stanici postane nula, kako bi mogao da ode dalje. S
obzirom da je javio da je dosao, putnici redom krecu da se odblokiraju i
dekrementiraju numFP i dobijaju bus. Medjutim, samo prva 3 ce uspeti da
prodju, jer samo toliko ima slobodnih mesta. Svih narednih 7 ce se opet
zavrteti i cekace na prvoj while petlji (while(busIN)). Dakle, imamo
situaciju da sada putnici cekaju na toj stanici i bus ceka na toj stanici.
Da stvar bude gora, i novi basevi koji budu dolazili ce se sada takodje
blokirati na istoj stanici, jer je onaj prvi vec na stanici. Imacemo kolaps
:D
Vrlo je moguce da sam nesto prevideo posto me uvati grip pa imam
temperaturu :D Salu na stranu, u cemu je stvar?
2. Metoda getNextStation u Bus klasi je potpuno nepotrebna. Kada bus sracuna
sledecu stanicu, on obavestava putnike koji cekaju na izlaz na svojoj end
stanici. Medjutim, oni svakako nece moci da izadju dok bus ne da dozvolu da
izadju, odnosno dok on ne dodje do sledece stanice, sto ce svakako biti
javljeno (notifyAll) u permitionToExit metodi. Dakle, run metoda je mogla
samo da radi: nextStation = sl.getNext() ili eventualno da getNextStation ne
bude synchronized i da nema notifyAll.
3. Ovo je manje bitna stvar, ali kad smo vec tu - konstruktor klase
Passenger - PID = ID++. S obzirom da smo u konkurentnom okruzenju, nije
nerealno da se Passengeri instanciraju iz vise od jednog threada, pa u tom
slucaju kod ne bi radio u najgorem slucaju. Pomenuta linija bi trebala da se
zameni sa: synronized(Passenger.class) { PID = ID++ }, sto bi bio lep primer
kako da se sinronizujemo na statickim poljima.
Toliko za sada.
Pozdrav,
Vanja
citajuci predlozeno resenje pomenutog problema naisao sam na nekoliko
nedoumica:
1. Da li se to meni cini ili ja vidim deadlock: na stanici ceka 10 putnika.
Na stanicu dolazi bus koji ima 3 slobodna mesta. Javlja da je dosao, a zatim
ceka da broj putnika na stanici postane nula, kako bi mogao da ode dalje. S
obzirom da je javio da je dosao, putnici redom krecu da se odblokiraju i
dekrementiraju numFP i dobijaju bus. Medjutim, samo prva 3 ce uspeti da
prodju, jer samo toliko ima slobodnih mesta. Svih narednih 7 ce se opet
zavrteti i cekace na prvoj while petlji (while(busIN)). Dakle, imamo
situaciju da sada putnici cekaju na toj stanici i bus ceka na toj stanici.
Da stvar bude gora, i novi basevi koji budu dolazili ce se sada takodje
blokirati na istoj stanici, jer je onaj prvi vec na stanici. Imacemo kolaps
:D
Vrlo je moguce da sam nesto prevideo posto me uvati grip pa imam
temperaturu :D Salu na stranu, u cemu je stvar?
2. Metoda getNextStation u Bus klasi je potpuno nepotrebna. Kada bus sracuna
sledecu stanicu, on obavestava putnike koji cekaju na izlaz na svojoj end
stanici. Medjutim, oni svakako nece moci da izadju dok bus ne da dozvolu da
izadju, odnosno dok on ne dodje do sledece stanice, sto ce svakako biti
javljeno (notifyAll) u permitionToExit metodi. Dakle, run metoda je mogla
samo da radi: nextStation = sl.getNext() ili eventualno da getNextStation ne
bude synchronized i da nema notifyAll.
3. Ovo je manje bitna stvar, ali kad smo vec tu - konstruktor klase
Passenger - PID = ID++. S obzirom da smo u konkurentnom okruzenju, nije
nerealno da se Passengeri instanciraju iz vise od jednog threada, pa u tom
slucaju kod ne bi radio u najgorem slucaju. Pomenuta linija bi trebala da se
zameni sa: synronized(Passenger.class) { PID = ID++ }, sto bi bio lep primer
kako da se sinronizujemo na statickim poljima.
Toliko za sada.
Pozdrav,
Vanja
- Follow-Ups:
- Re: The bus problem - komentari
- From: "Sasa Vitorovic" <savitor@sbb.co.yu>
- Re: The bus problem - komentari
Previous by date: za asistenta
Next by date: Re: The bus problem - komentari
Previous by thread: InterruptedException Next by thread: Re: The bus problem - komentari
Previous by thread: InterruptedException Next by thread: Re: The bus problem - komentari