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

Re: The bus problem - komentari

by Sasa Vitorovic
utorak, 05. jun 2007 - 23:10.

Pozdrav,

Koliko ja znam Java ne dolazi na ispit, osim eventualno za starije generacije!

Pozdrav,
Sasa Vitorovic
----- Original Message -----
From: Vanja Petreski
To: drs@rti.etf.bg.ac.yu
Cc: vpetreski@gmail.com
Sent: Tuesday, June 05, 2007 10:29 PM
Subject: [drs] 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



------------------------------------------------------------------------------


-----------------------------------------------------------------
unsubscribe:
minimalist@rti.etf.bg.ac.yu?subject=unsubscribe%20drs
-----------------------------------------------------------------