多執行緒時的 Singleton

多執行緒時的 Singleton

多執行緒時的 Singleton

多執行緒時的 Singleton

為避免多執行緒同時存取Singleton類別,調用GetInstance()
方法,會有可能造成建立多個實體。

解決方法可以使用lock來確保當一個執行緒位於程式碼的臨界
區時,另一個執行緒不進入臨界區。如果其它執行緒試圖進入
鎖定的程式碼,則它將一直等待,直到物件被釋放。

class Singleton
{
private static Singleton instance;
private static readonly object syncRoot = new object();
private Singleton()
{

}

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

}