C#防止多线程下的单实例模式

我这里以获得连接字符串为例

 public sealed class SConnection
    {
        //S表示为Singleton设计模式
        //该类标记为 sealed 以阻止发生派生,而派生可能会增加实例此外,变量标记为 readonly,这意味着只能在静态初始化期间(此处显示的示例)或在类构造函数中分配变量。
        private static SConnection instance;
        private static object syncRoot = new Object();//为了解决多线程,而添加的一个附加变量,以避免死锁
        private readonly string connectionString;
        private SConnection()
        {
            //禁止在外部被实例化,而只允许在内部实例化
            //connectionString = “Data Source=127.0.0.1;Initial Catalog=MyTest;Integrated Security=True;Asynchronous Processing=True;MultipleActiveResultSets=True”;
            connectionString = ConfigurationManager.ConnectionStrings[“MySqlConnString”].ConnectionString;
        }
        public static SConnection Instance
        {
            get
            {
                if (instance == null)//第一个进程和第二个进程同时走到此,判断都为true
                {
                    lock (syncRoot)//第一个线程锁定,在释放前不允许其他线程进入,只能等待
                    {
                        if (instance == null)//作用是只允许实例化一次,避免再次被实例化
                        {
                            instance = new SConnection();
                        }
                    }

                }
                return instance;
            }
        }
        public string ConnectionString
        {
            get
            {
                return connectionString;
            }
        }
    }

引文来源  C#防止多线程下的单实例模式 – xuzhiqiang1010的专栏 – CSDN博客