您的位置:首页 > 编程语言 > Go语言

GOOD单例模式,多线程同时访问一个实例对象问题的处理,加lock

2011-12-28 16:15 281 查看
 
多线程同时访问一个实例对象时, 可以给进程加一把锁来处理。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;

            }

        }

    }

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程 object null class
相关文章推荐