Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    24

    [JAVA] Problemi di sincronizzazione

    Salve a tutti, ho un problema: non so bene come fare il synchronized.
    Ora mi spiego meglio:
    ho 2 istanze dello stesso oggetto (un thread per la precisione) e io devo sincronizzare contemporaneamente lo stesso campo dati (dell'oggetto stesso) per entrambe le istanze.
    piccolo esempio:
    codice:
    public class C extends Thread{
       T campodati;
       ...
    }
    
    ...
       C a1 = new C(), a2 = new C();
       synchronized(a1.campodati && a2.campodati){
          ...
       }
    so che così non funziona, ma è per dare un'dea di quello che vorrei fare :P
    grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Problemi di sincronizzazione

    Originariamente inviato da eardin
    so che così non funziona, ma è per dare un'dea di quello che vorrei fare :P
    grazie in anticipo.
    A prima vista direi: metti 2 blocchi synchronized uno dentro l'altro (prima fai il lock di uno poi, dentro, dell'altro oggetto)

    Perché hai bisogno di fare questa cosa particolare??? Spiega meglio ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Ma non e' che per caso tu vorresti una risorsa statica che viene letta/modificata da tutti i tuoi thread?
    Perche' con il codice che hai postato hai un "campodati" diverso per ogni thread, quindi non si capisce bene perche' tu li debba sincronizzare.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    24
    causa esame universitario

    avevo pensato alla soluzione dei sychronized uno dentro l'altro, ma volevo essere sicuro che non ci fossero altri modi, dato che la prof quando interpellata su questo ha risposto: dovete scoprirlo voi.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    24
    Ma non e' che per caso tu vorresti una risorsa statica che viene letta/modificata da tutti i tuoi thread?
    Perche' con il codice che hai postato hai un "campodati" diverso per ogni thread, quindi non si capisce bene perche' tu li debba sincronizzare.
    no, non è quello che voglio perchè il thread attivo deve lockare il suo campo dati e quello di un altro thread

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Beh, allora devi fare come ti ha consigliato andbin.
    Per sicurezza, posta il testo dell'esercizio se puoi.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    24
    http://www.math.unipd.it/~crafa/prog3/progetto.pdf

    è il link alla specifica del progetto da realizzare per l'esame.

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Non vorrei spararla grossa, ma ad occhio con i due synchronized incapsulati rischi il deadlock.

    1 lock su 1.strutturadati
    scheduling
    2 lock su 2.strutturadati
    scheduling
    3 lock su 3.strutturadati
    scheduling
    1 tenta lock su 2.strutturadati ATTESA
    scheduling
    2 tenta lock su 3.strutturadati ATTESA
    scheduling
    3 tenta lock su 1.strutturadati DEADLOCK

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    24
    si ok non ti preoccupare gestisco bene il deadlock, anche se non credo possa avvenire poichè non viene rilasciato il lock finchè non finisco il blocco synchronized

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Beh, se lo gestisci con criterio, allora va bene.
    Si ok non ti preoccupare gestisco bene il deadlock, anche se non credo possa avvenire poichè non viene rilasciato il lock finchè non finisco il blocco synchronized
    Per la verita questo e' proprio il motivo che una volta su 1000 si puo' scatenare il deadlock, pero' magari non e' il tuo caso. Dipede dal codice che scrivi. Ricorda pero' che hai 2 sincronizzazioni incapsulate, quindi entri nella prima (impedendo a tutti gli altri di accedere alla struttura dati coinvolta) poi tenti di entrare nella seconda. Ma se quest'ultima fosse gia' bloccata?
    Il tuo esercizio ricorda motlo quello dei filosofi a cena dal punto di vista della concorrenza (http://it.wikipedia.org/wiki/Problem...ilosofi_a_cena).
    In bocca al lupo per l'esercizio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.