雙重鎖定
雙重鎖定
雙重鎖定
雙重鎖定
下方程式碼若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;
}
}