Voglio vedere l'utilizzo in tempo reale della parola chiave Volatile
in C#. ma non sono in grado di proiettare il miglior esempio. il seguente codice di esempio funziona senza la parola chiave Volatile
come è possibile?Qual è lo scopo della parola chiave volatile in C#?
class Program
{
private static int a = 0, b = 0;
static void Main(string[] args)
{
Thread t1 = new Thread(Method1);
Thread t2 = new Thread(Method2);
t1.Start();
t2.Start();
Console.ReadLine();
}
static void Method1()
{
a = 5;
b = 1;
}
static void Method2()
{
if (b == 1)
Console.WriteLine(a);
}
}
Nel codice precedente sto ottenendo un valore 5. come funziona senza utilizzare la parola chiave volatile?
Non funziona. Dato che hai dimenticato di usare 'volatile', ti aspetti di ottenere un valore diverso da 5. Eppure ottieni 5. Quindi è * non * funzionante, che è quello che ti aspetteresti di lasciare qualcosa. (Risolvi il bug e il mistero andrà via. Il codice con bug di thread è quasi impossibile da capire. Basta correggerli e dimenticarsene.) –
Puoi dirmi un esempio migliore per volatile? – Gun
Ora, senza alcuna parola chiave 'volatile', non c'è ** garanzia ** che il programma non restituisca '0'. Potrebbe (qualche giorno) emettere '0'. Se si aggiunge la parola chiave 'volatile', non può restituire '0', può solo dare _either_ nessun output _or_' 5'. –