C#中不需要用鎖的安全執行緒的Singleton設計模式!

來源:互聯網
上載者:User

典型的安全執行緒的Singleton實現是使用double-checked locking的實現,但是在.NET中我們並不需要使用double-checked locking就可以優雅地實現Singleton模式。

這個優美的Singleton實現基礎是.NET對運行期初始化的完整定義。它的優美之處是不需要典型的double-checked locking。

當CLR載入class
Singleton的時候,因為Singleton沒有static
variables需要被初始化,所以Singleton的初始化其實什麼也沒做。而對static class
LazyHolder來說,直到它被執行的時候才會被初始化。而static class
LazyHolder只有載Singleton.GetInstance()被執行的時候才會執行到。當第一次調用GetInstance()的時候
CLR才會載入和初始化LazyHolder這個class。對於LazyHolder class的初始化就是對static variable
Instance的初始化。而Instance的初始化就是執行Singleton的private
constructor。因為.NET保證class的initialization是serial的,就是說在載入和初始化的過程中我們不需要自己做同
步。因為初始化過程是一個serial的操作,所以對於後面的GetInstance,我們不需要做任何同步,它也會返回一個正確初始化的
Singleton對象。

實現代碼:

 1     public class Singleton
 2     {
 3         private static class LazyHolder
 4         {
 5             public static readonly Singleton Instance = new Singleton();
 6         }
 7 
 8         private Singleton()
 9         {
10         }
11 
12         public static Singleton GetInstance()
13         {
14             return LazyHolder.Instance;
15         }
16     }

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.