La dico rapida.
Circa il dubbio volatile vale per tutto l'oggetto, la risposta è no, volatile vale solo per il valore delle variabili così dichiarate. L'insieme di campi appartenenti ad un oggetto non appartiene al concetto di valore di un riferimento (è un puntatore, ha dentro un numero e solo quel numero è "valore" del riferimento).
Se un l'oggetto X, campo volatile, ha a sua volta tre campi A, B, C e questi non sono a loro volta volatile, l'accesso ai campi A, B, C non subisce le restrizioni del modello di memoria, cioè non è garantito che il Thread che accede ad A, B, C tramite x veda gli ultimi valori che un altro Thread abbia applicato ad A, B, C.
Al fine di garantire che il valore di A, B, C, campi di X, sia l'ultimo che un qualsiasi Thread abbia loro assegnato non basta che X sia volatile ma devono esserlo anche A, B, e C.
Più in generale, ciò che devi fare è adottare quei comportamenti che ti garantiscano l'esistenza di una relazione accade-prima tra la scrittura di un valore in una variabile e la lettura del valore di quella variabile.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
|