程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 在C#中實現Singleton(3)

在C#中實現Singleton(3)

編輯:關於C語言

注意:公共語言運行庫解決了在其他環境中常見的、與使用 Double-Check Locking 有關的問題。

下面的實現僅允許一個線程在尚未 創建 Singleton 實例的情況下進入關鍵區域(該區域由 lock 塊標識)。

using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}

此方法確保了僅在需要實例時才會創建僅一個 實例。此外,變量被聲明為 volatile,以確保只有在實例變量分配完成後才能訪 問實例變量。最後,此方法使用 syncRoot 實例來進行鎖定(而不是鎖定類型本 身),以避免發生死鎖。

此 double-check locking 方法解決了線程並發 問題,同時避免在每個 Instance 屬性方法的調用中都出現獨占鎖定。它還允許 您將實例化延遲到第一次訪問對象時發生。實際上,應用程序很少需要這種類型 的實現。大多數情況下,靜態初始化方法已經夠用。

在 C# 中實現 Singleton 具有下列優缺點:

優點

• 由於 .Net Framework 顯式地指定靜態變量初始化如何以及何時發生,因此靜態初始化方法是可能的。

• 列的前面的"多線程 Singleton"中所描述的 Double- Check Locking 技術已在公共語言運行庫中正確實現。

缺點

如果 您的多線程應用程序需要進行顯式初始化,那麼必須采取措施以避免線程問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved