当前位置: 代码迷 >> 综合 >> 多线程访问单例的解决方案
  详细解决方案

多线程访问单例的解决方案

热度:89   发布时间:2024-01-21 14:12:11.0

多线程同时访问一个实例对象时, 可以给进程加一把锁来处理。lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。

public class Singleton

{

    private static Singleton instance;

    private static readonly object synRoot=new object();

    private Singleton() //改为私有

    {

    }

    public static Singleton GetInstance()

    {

        lock(synRoot)

        {

            if(instance==null)

            {

                instance=new Singleton();

            }

            return instance;

        }

    }

}

 

双重锁定:不用让线程每次都加锁,而只是在实例未被创建的时候再加锁处理,提高了性能。

public class Singleton

{

    private static Singleton instance;

    private static readonly object synRoot=new object();

    private Singleton() //改为私有

    {

    }

    public static Singleton GetInstance()

    {

        if(instance==null)

        {

           lock(synRoot)

            {

                if(instance==null)

                {

                    instance=new Singleton();

                }

                return instance;

            }

        }

    }

}

 

  相关解决方案