C# 设计模式系列教程-单例模式

2019-12-30 12:47:00刘景俊

  6.2 双重锁定


  public class Singleton
  {
    private static Singleton m_Instance;

    static readonly object o = new object();

    private Singleton()
    {
      // 将默认构造函数定义为私有,防止外部调用它实例化别的对象
    }

    public static Singleton GetInstance()
    {
      // 这里增加了一个判断实例是否存在,只有在不存在时才给加锁,也就是在这个实例的生命周期中只加过一次锁
      if (m_Instance == null)
      {
        lock (o)
        {
          if (m_Instance == null)
          {
            m_Instance = new Singleton();
          }
        }
      }

      return m_Instance;
    }
  }

  双重锁定保证了实例在它的生命周期中只被锁定一次,因而它对性能不会有影响。

以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持ASPKU。



注:相关教程知识阅读请移步到c#教程频道。