C#中的单例模式

来源:互联网 发布:linux 翻到最后一页 编辑:程序博客网 时间:2024/06/05 18:05
、//  单线程应用
public sealed class Singleton {    private static readonly Singleton instance = new Singleton();    private Singleton(){}    public static Singleton Instance    {       get        {          return instance;        }    } } 
//
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 属性方法的调用中都出现独占锁定。它还允许您将实例化延迟到第一次访问对象时发生。实际上,应用程序很少需要这种类型的实现。大多数情况下,静态初始化方法已经够用。


原创粉丝点击