该程序执行两个不同的线程,并告诉我“比赛”的获胜者是谁。
出乎意料的是,有时两个线程都“获胜”(我希望有人或没有人获胜)。这是预期的行为,为什么?我显然在这里遗漏了一些基本的东西。
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
...