多線程併發下的單例模式

多線程併發下的單例模多線程


很久沒寫點東西了,感受很對不住各位。今天有點心得正好和你們聊聊閒天。是關於單例模式在併發狀況下應該怎麼寫纔對,我仍是用.net語言來講這些。
首先,咱們都知道單例模式,別說你不知道。
代碼以下:
public class Singleton
   {
       private Singleton() { }
       private static Singleton instance = null;
       public Singleton GetInstance()
       { return instance == null ? new Singleton() : instance; }
   }
可是這個有問題了,多線程下,怎麼能保證從instance == null?到new Singleton() : instance之間沒有別的線程在操做呢?如今的代碼明顯知足不了這個狀況,而這在高併發下顯然是能夠出現的。那就想一想辦法唄,例如咱們使用.net中的lock來作修改。
public class Singleton
   {
       private Singleton() { }
       private static Singleton instance = null;
       private static object _lock = new object();
       public Singleton GetInstance()
       {
           if (instance == null)
           {
               lock (_lock)
               {
                   if (instance == null)
                   { instance = new Singleton(); }
               }
           }
           return instance;
       }
   }
這樣就能夠實現有且僅有一次初始化的機會。併發

相關文章
相關標籤/搜索