我想看到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. 因此它 不 起作用,这正是您忘记某些内容时所预期的结果。(修复错误,神秘将从此消失。带有线程错误的代码几乎不可能理解。只需修复它们并忘记它。) - David Schwartzvolatile
关键字,就不能保证程序不会输出0
。它可能(某一天)输出0
。如果添加了volatile
关键字,它就不能输出0
,只能给出无输出或5
的结果。 - Jeppe Stig Nielsen