Secondo MSDN:Volatile Viole il suo lavoro principale?
La parola chiave volatile indica che un campo potrebbe essere modificata multipli thread che stanno eseguendo contemporaneamente. I campi che sono dichiarati volatili non sono soggetti alle ottimizzazioni del compilatore che assume l'accesso da un singolo thread. Ciò garantisce che il valore più aggiornato di sia presente nel campo in ogni momento.
Si prega di notare l'ultima frase:
Questo assicura che il massimo valore up-to-date è presente nel campo in ogni momento.
Tuttavia, c'è un problema con questa parola chiave.
Sono read che possa modificare l'ordine delle istruzioni:
First instruction Second instruction Can they be swapped? Read Read No Read Write No Write Write No Write Read Yes! <----
Ciò significa John imposta un valore a un campo volatile, e successivamente Paolo vuole leggere il campo, Paul sta ottenendo il valore vecchio!
Cosa sta succedendo? Non è il lavoro principale?
So che ci sono altre soluzioni, ma la mia domanda riguarda la parola chiave volatile.
Devo (come programmatore) evitare l'utilizzo di questa parola chiave, a causa di un comportamento così strano?
Da dove viene questo tavolo? – Corbin
@Corbin premere sul collegamento 'ive read'. –
Ah ok. Questo ha senso allora. Un secondo e elaborerò. Edit: Ok, riprendo quello. Ha senso nella mia testa, ma non riesco a spiegarlo>. <. – Corbin