多线程并发下的单例模式

多线程并发下的单例模多线程


很久没写点东西了,感受很对不住各位。今天有点心得正好和你们聊聊闲天。是关于单例模式在并发状况下应该怎么写才对,我仍是用.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;
       }
   }
这样就能够实现有且仅有一次初始化的机会。并发

相关文章
相关标签/搜索