单例模式与多线程

一 饿汉模式(非多线程)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SingleInstance
{
    //饿汉式
    class God
    {
        private static God instance=new God();

        private God() { }

        public static God Instance() { return instance; }
    }
}

二 懒汉模式

//懒汉式,多线程下存在问题
    class God
    {
        private static God instance = null;
        private God() { }

        public static God GetInstance() { 
            if(instance==null)
            {
                instance = new God();
            }
            return instance; }
    }

上面在多线程的情况下,存在问题。

我们使用双锁机制去实现多线程下的安全问题 

//懒汉式,多线程下存在问题
    class God
    {
        private static God instance = null;
        private static object locker=new object();
        private God() { }

        public static God GetInstance() {
            if (instance == null)
            {
                lock (locker)
                {
                   if(instance== null)
                    {
                        instance = new God();
                    }
                }
            }            
            return instance; }
    }

 

你可能感兴趣的:(c#,单例模式,开发语言,c#)