多執行緒時的 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;
}
}