このプログラムは 2 つの異なるスレッドを実行し、「レース」の勝者を教えてくれます。
予想外に、両方のスレッドが「勝つ」ことがあります(誰かが勝つか、誰も勝てないと思っていました)。これは予想される動作で、その理由は何ですか? ここで明らかに基本的なことが欠けています。
class Program
{
public volatile static int a = 0;
public volatile static int b = 0;
public static void Main()
{
for(int i = 0; i < 1000; i++)
{
a = 0;
b = 0;
Parallel.Invoke(delegate { a = 1; if (b == 0) Console.WriteLine("A wins"); },
delegate { b = 1; if (a == 0) Console.WriteLine("B wins"); });
Console.WriteLine(System.Environment.NewLine);
Thread.Sleep(500);
}
}
}
結果:
A wins
B wins
A wins
B wins
A wins
...