- darkjoker ha scritto:
- blacclight se ne è andato...
Tranquilli leggo ancora il forum di tanto in tanto e se le domande sono intelligenti non vedo perché di tanto in tanto non dovrei rispondere...
Da nessuna parte è scritto che una variabile volatile è modificabile da un altro programma. Due programmi sono due entità risedenti in memoria con due stack diversi che in nessuna maniera possono comunicare, quindi se ho una variabile volatile in Word e voglio leggerne il valore da Excel non posso farlo in nessun modo. È scritto casomai che con volatile si identifica una variabile che può essere modificata da un altro processo o thread diverso da quello che l'ha dichiarata, ma sempre all'interno dello stesso programma. Detto questo, la keyword volatile non aggiunge praticamente nulla di nuovo alla variabile: dà solo quest'informazione aggiuntiva al compilatore, ovvero che quella variabile può essere modificata anche da altri processi e thread all'interno dell'applicazione e quindi di prenderla 'con le pinze' e non ottimizzarla. Per intenderci, se io ho un codice del genere:
- Codice:
-
int var;
void foo() {
var=0;
while (var>-10)
printf ("Ciao\n");
}
Ora se il compilatore fa ottimizzazione potrebbe notare che effettivamente var è sempre maggiore di -10 e far diventare quel codice
- Codice:
-
int var;
void foo() {
var=0;
while (TRUE)
printf ("Ciao\n");
}
Ma questo potrebbe portare problemi se la variabile var è modificata anche da altri thread o processi, in quanto il suo valore potrebbe essere modificato senza che il processo di ottimizzazione fatto dal compilatore se ne accorga. Dichiarandola come volatile è come se gli dicessi 'guarda, questa roba qui la modifica anche qualcun altro, non farci su robe strane, non toccarla e non farci su dell'ottimizzazione'.