PDA

View Full Version : Java problemi thread con sincronizzazione


Fenomeno85
29-04-2006, 19:06
Allora ho questo problema:
http://img225.imageshack.us/img225/6672/immagine5hg.png

io avevo risolto con il metodo del produttore consumatore ma questa soluzione al docente non va bene. Ho provato allora a mettere una variabile locale per ogni classe che rappresentava lo stato e poi ogni thread andava a modificare quella dell'altro per effettuare la sincronizzazione.
Questa soluzione mi procude una infinità di deadlock.
Allora chiedo a voi:

come diavolo si fa a sincronizzare due thread della mutua che non condividono un buffer di supporto??

~§~ Sempre E Solo Lei ~§~

Fenomeno85
29-04-2006, 21:13
dai non ci credo che non c'è nessuno che lo sa fare :cry:

~§~ Sempre E Solo Lei ~§~

franksisca
29-04-2006, 21:23
prova a usare un monitor che si mette in attesa su conta, appena conta inisce lui sveglia attesa.chiarO???

Fenomeno85
29-04-2006, 21:35
prova a usare un monitor che si mette in attesa su conta, appena conta inisce lui sveglia attesa.chiarO???

chiaro che no ... non hai del codice che mi fa vedere sta cosa?

~§~ Sempre E Solo Lei ~§~

nightwolf
29-04-2006, 21:40
http://www.elet.polimi.it/upload/costa/info3/exams/20050914-Iprova.pdf

;)

Fenomeno85
29-04-2006, 21:56
non capisco quello che fa :mbe: ok che funziona ma non lo capisco :muro:

~§~ Sempre E Solo Lei ~§~

nightwolf
29-04-2006, 22:05
Praticamente il thread "attende" quando viene creato riceve il riferimento al thread "conta" creato dal main e quindi si sincronizza su quell'oggetto (di fatto si sincronizza sul thread conta) stando in wait e sbloccandosi solo quando verranno fatte notify nell'oggetto conta che gli è stato passato e solo in quello (infatti fa conta.wait()), Conta invece fa la notify su this, cioè sullo stesso oggetto su cui di fatto "attende" ha fatto la wait, e quindi fa sbloccare "attende". Ovviamente per fare la wait e la notify devi avere acquisito il lock sull'oggetto su cui vuoi attendere o notificare, ecco il perchè dei blocchi sync(oggetto).

Fenomeno85
29-04-2006, 22:22
quindi io mi vo a sincronizzare su conta e dico con conta.wait() mi metto in attesa su conta finchè non mi risveglia :O

ok allora adesso posso andare a conquistare il mondo

~§~ Sempre E Solo Lei ~§~

franksisca
30-04-2006, 00:11
ho visto solo ora la tua domanda, am visto che sei partito alla conquista de mondo....... :D :D :D :D

Fenomeno85
30-04-2006, 12:36
ho visto solo ora la tua domanda, am visto che sei partito alla conquista de mondo....... :D :D :D :D

no semplicemente perchè a lezione non abbiamo mai visto che mi ricordi una esempio di come fare una cosa del genere

poi non avevo trovato la soluzione dell'esame :muro:

~§~ Sempre E Solo Lei ~§~