mad_hhatter
31-08-2007, 09:05
sto cercando di capire il ruolo della keyword volatile, ma non riesco bene a immaginarne l'implementazione... da una parte la documentazione dice che viene impedito il riordino delle istruzioni e viene seguito l'ordine prescritto dal sorgente del programma... e fin qui ci sono... ma questo come influisce sull'ordine di esecuzione di più thread? vieta l'interleaving di 2 accessi alla stessa variabile? dagli articoli che ho letto deduco di no...
però qui: http://www.ibm.com/developerworks/java/library/j-jtp06197.html?ca=drs-
al paragrafo "pattern #3"
si trova un esempio relativo al logging dell'ultimo utente autenticato... ora, se è ammesso l'accesso interleaved alla variabile "lastUser", cosa impedisce la seguente sequenza di istruzioni?
- threadA esegue il login ma si sospende prima di aggiornare lastUser
- threadB esegue un login più recente e aggiorna lastUser
- threadA si risveglia e aggiorna lastUser con un utente che NON è il più recente...
a sto punto chiedo... a cosa è servito il modificatore volatile?
immagino volatile sia importante in ambienti multi-processore con cache non condivisa, per evitare che i vari processori vedano valori diversi di una variabile condivisa e inserita nelle rispettive cache... ma non riesco a comprendere completamente il ruolo di volatile... la documentazione mi sembra un po' stringata, sia per Java che per C#.
potete chiarirmi le idee?
grazie mille
però qui: http://www.ibm.com/developerworks/java/library/j-jtp06197.html?ca=drs-
al paragrafo "pattern #3"
si trova un esempio relativo al logging dell'ultimo utente autenticato... ora, se è ammesso l'accesso interleaved alla variabile "lastUser", cosa impedisce la seguente sequenza di istruzioni?
- threadA esegue il login ma si sospende prima di aggiornare lastUser
- threadB esegue un login più recente e aggiorna lastUser
- threadA si risveglia e aggiorna lastUser con un utente che NON è il più recente...
a sto punto chiedo... a cosa è servito il modificatore volatile?
immagino volatile sia importante in ambienti multi-processore con cache non condivisa, per evitare che i vari processori vedano valori diversi di una variabile condivisa e inserita nelle rispettive cache... ma non riesco a comprendere completamente il ruolo di volatile... la documentazione mi sembra un po' stringata, sia per Java che per C#.
potete chiarirmi le idee?
grazie mille