[英]What is the volatile keyword purpose in c#?
我想看看在c#中實時使用Volatile
關鍵字。 但我無法投射最好的例子。 下面的示例代碼在沒有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
關鍵字告訴編譯器變量可以隨時更改,因此它不應該優化讀取和寫入變量。
考慮這樣的代碼:
int sum;
for (var i = 0; i < 1000; i++) {
sum += x * i;
}
由於變量x
在循環內部沒有變化,編譯器可能會在循環外部讀取變量,並在整個循環中使用相同的值。
如果將變量x
設為volatile,則編譯器將在每次使用變量時讀取變量的值,因此如果更改其他線程中的值,則將立即使用新值。
如果正確使用volatile
,則保證代碼正常工作。 如果你在代碼需要的地方省略volatile
,它可能在大多數時候都可以正常工作,但是它不能保證,並且當它會受到最大的傷害時可能會失敗。
了解線程競爭的代碼如何失敗或不失敗需要深入了解實現和平台。 這並不簡單,通常不值得擔心。 只需遵守規則,您的代碼就會一直有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.