簡體   English   中英

c#中的volatile關鍵字用途是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM