雙重鎖定

雙重鎖定

雙重鎖定

雙重鎖定

下方程式碼若instance為null並且同時有兩個執行緒調用
GetInstance()方法時,它們將都可以透過第一重instance
==null的判斷。然後由於lock機制,這兩個執行緒則只有
一個進入,另一個在外排隊等候,必須要其中一個進入並
出來後,另一個才能進入。

class Singleton
{

public static Singleton GetInstance()
{
    if (instance == null)
    {
        lock(syncRoot)
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
        }
    }
    return instance;
}

}