Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    sincronizzazione thread

    Salve a tutti
    ho due thread che fanno le seguenti cose in pseudo codice con lo stesso Vector v

    primo thread
    Codice PHP:

    if(aParticularEventHappens)
                      
    null 
    secondo thread
    Codice PHP:

    if(!= null)
          
    printAllValuesOf(v
    vorrei sapere se anche in questo caso devo usare la sincronizzazione
    oppure l'assegnamento di null ad una variablie è atomico ?

    grazie per l'attenzione
    MB

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

    Re: sincronizzazione thread

    Originariamente inviato da Mr.Bloom
    oppure l'assegnamento di null ad una variablie è atomico ?
    Non è solo questione di "atomicità" .... (la risposta è sì, l'assegnamento v = null è "atomico").
    No, centra anche la "visibilità"!!! Dato un oggetto X condiviso e usato da più thread, se da un thread si assegna qualcosa ad una variabile di istanza di X, senza apposita sincronizzazione non c'è alcuna garanzia che un altro thread "veda" la modifica.

    Non ho una visione completa di quello che devi fare (quindi non posso dire più di tanto ..) ma credo che potrebbe bastare dichiarare la variabile di istanza/classe 'v' (che fa riferimento al Vector) come "volatile". Che assicura la "visibilità".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Intendi dire che se nel primo thread creo il vettore e poi creo il secondo thread passandogli
    tale vettore come argomento i due thread operano su zone di memoria differenti ?

    e per evitare tale compostamento devo usare metodi o blocchi synchronized (e quindi synchronized non è
    solo per garantiire una mutua esculsione per salvaguardare l'integrità dei dati) ?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Mr.Bloom
    Intendi dire che se nel primo thread creo il vettore e poi creo il secondo thread passandogli
    tale vettore come argomento i due thread operano su zone di memoria differenti ?
    Tu hai un oggetto di tipo XYZ .... e più thread lo usano. Non ha importanza qui quante variabili reference ci siano ... se una sola o più. L'importante è che più thread usano lo stesso oggetto.
    In tale situazione, senza sincronizzazione, se da un thread si invoca xyz.setQualcosa(...), non c'è alcuna garanzia che successivamente da un altro thread un xyz.getQualcosa() ritorni l'ultimo valore impostato dall'altro thread. Queste sono questioni di "visibilità" ... non di "mutua esclusione".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ok ultimo post perche non voglio essere pedante,
    però mi sembra una lacuna importante che volgio colmare e voglio essere sicuro.

    nel tuo esempio xyz.getQualcosa() potrebbe tornarmi il valore vecchio perche dallo scheduler viene
    eseguito prima dell'altro thread che esegue xyz.setQualcosa(), non perche effettivamente in memoria
    c'è ancora il valore vecchio anche se dallo scheduler il thread con getQualcosa viene eseguito prima di
    quello con setQualcosa()

    scusa eh se non capisco bene e grazie per le tue risp.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.