MS Link:Il login del link ipertestuale è visibile.
La parola chiave volatile indica che un campo può essere modificato da più thread che si eruono contemporaneamente. I campi dichiarati come volatili non sono limitati dall'ottimizzazione del compilatore (supponendo che siano accessibili tramite un singolo thread). Questo garantisce che il campo venga sempre visualizzato con il valore più recente.
Il modificatore volatile è tipicamente usato per campi che sono accessibili da più thread ma non serializzano l'accesso tramite un'istruzione lock.
Le parole chiave volatili possono essere applicate ai seguenti tipi di campi:
- Tipo di citazione.
- Tipo di puntatore (in un contesto non sicuro). Si noti che, sebbene il puntatore stesso possa essere mutabile, l'oggetto a cui punta non può esserlo. In altre parole, "puntatore a un oggetto mutabile" non può essere dichiarato.
- Tipi come Sbyte, Byte, Short, Ushort, Int, Uint, Char, Float e Bool.
- Un tipo enum con uno dei seguenti tipi di base: byte, sbyte, short, ushort, int o uint.
- Parametri generici di tipo noti per essere tipi di riferimento.
- IntPtr e UIntPtr.
Le parole chiave variabili possono essere applicate solo ai campi di una classe o struttura.Le variabili locali non possono essere dichiarate volatili。
Niente più sciocchezze, scrivi un ciclo per testarlo:
Testiamolo 10.000 volte in un loop,si è trovato che l'output di un valore è corretto, ma,Non spiegaVolatile è sicuro per la filettaturaPerché, se lo testi molte volte, scoprirai che ci saranno errori di calcolo! Perché c'è la possibilità di un risultato corretto e una possibilità di un risultato sbagliato
Codice:
Testiamo di nuovo 100.000 loop, e possiamo scoprire che il valore di a è errato, perché più piccolo è il numero di loop, minore è la probabilità di errore, e l'errore non è così evidente, proprio come non c'è stato errore dopo 10.000 loop poco fa.
In questo momento, aggiungiamo un blocco per testare e si può vedere che il valore di a viene calcolato correttamente come ci aspettavamo.
Codice:
Sommario: volatile non garantisce la sicurezza del thread, come puoi vedere nell'esempio sopra.
|