C# Volatile
anahtar kelimesinin gerçek zamanlı kullanımını görmek istiyorum. ancak en iyi örneği yansıtamıyorum. Aşağıdaki örnek kod Volatile
anahtar sözcüğü olmadan çalışır nasıl mümkün olabilir?C# içinde geçici anahtar kelime amacı nedir?
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);
}
}
Yukarıdaki kodda 5 olarak bir değer alıyorum. Uçucu anahtar kelime kullanmadan nasıl çalışır?
Çalışmıyor. “Uçucu” kullanmayı unuttuğunuz için, 5'ten başka bir değer elde etmeyi beklersiniz. Yine de 5 elde edersiniz. Öyleyse, * bir şeyleri dışarıda bıraktığınız şey olan * çalışma * değil. (Hatayı düzeltin ve gizem gidecektir. İş parçacığı kodlu kodun anlaşılması neredeyse imkansızdır. Sadece düzeltin ve unutun.) –
Bana uçucu için en iyi örneklerden bahseder misiniz? – Gun
Artık, herhangi bir “volatile” anahtar kelimesi olmadan, programın '0' çıkmayacağı ** garantisi yoktur. 0 (bir gün) çıkışı olabilir. Eğer 'volatile' anahtar sözcüğünü eklerseniz, '0' çıkamaz, sadece _either_ no output _or_ '5' verebilirsiniz. –