Volatile
キーワードのリアルタイム使用をC#で見たいです。最良の例を投影することはできません。以下のサンプルコードはVolatile
キーワードなしで動作しますか?C#のvolatileキーワードの目的は何ですか?
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);
}
}
上記のコードでは、私は5という値を得ています。volatileキーワードを使用しないとどのように動作しますか?
動作しません。あなたは 'volatile 'を使うのを忘れてしまったので、5以外の値を取ることを期待しています。しかし、あなたは5になるので、何かを残すことで期待しているのは働きません。 (バグを修正し、謎が解消されます。スレッドバグのコードはほとんど理解できません。修正して忘れてください。) –
volatileのベストプラクティスを教えてください。 – Gun
これで 'volatile 'キーワードがなくても、プログラムが' 0'を出力しない**保証**はありません。それは(いつか) '0'を出力するかもしれません。 'volatile'キーワードを追加した場合、' 0'を出力することはできませんが、 '_'は出力できません。 –