我希望看到在c#中實時使用Volatile
關鍵字。但我無法展示最好的例子。下面的示例代碼在沒有Volatile
關鍵字的情況下工作如何可能?什麼是在C#中的揮發性關鍵字的目的?
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個。所以它不*工作,這是您期望將某些東西排除在外的。 (修復bug和神祕程序會消失,帶有線程bug的代碼幾乎不可能理解,只需修復它們並忘掉它。) –
你能告訴我一個最好的易失性示例嗎? – Gun
現在,沒有任何'volatile'關鍵字,沒有**保證**程序不會輸出'0'。它可能(有一天)輸出'0'。如果添加'volatile'關鍵字,它不能輸出'0',它只能給出_either_無輸出或''5'。 –