標籤

ASP.NET MVC (29) Visual C# (15) JQuery (10) Plugins (8) JQuery Plugins (6) JavaScript (6) MySQL (5) CSS (4) LinQ (4) Mac OS (4) CentOS (3) Design Pattern (3) Entity Framework (3) IIS (3) Python (3) Windows (3) php (3) Docker (2) LAMP (2) SQL Server (2) WCF (2) .NET (1) .NET Core (1) AWS (1) Browser (1) GIS (1) IE (1) Internet Security (1) Linux (1) Platform (1) React (1) SEO (1) Testing (1) VMware (1) Windows 7 (1) cookie (1) curl (1) laravel (1) phpBB (1) session (1) 中古屋 (1) 透天 (1) 閒言閒語 (1) 面試 (1) 鳥松 (1)

2013年10月18日 星期五

[Visual C#][Design Pattern] C#實作執行緒安全(thread-safe)的Singleton類別


Singleton是撰寫程式時常用到的一個設計模式,例如需要實作某個單一控管的容器(連接池是一個例子),同時也需要考慮Singleton類別的執行緒安全,我們必須保證不會同時有兩個以上的物件被實體化(new instance)。

以下是一個Singleton類別的範例,此範例使用雙重判斷(double-check)的手法來避免兩個以上的物件被實體化:

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;
      }
   }
}



[Reference]:

Implementing Singleton in C#

Thread Safe C# Singleton Pattern