记多线程安全的单例模式--singleton

     又是一个毕业季,校招季,希望过几天的面试笔试,我能过五关斩六将,杀出一条血路,嘿嘿O(∩_∩)O!

      少说废话,先写个笔试中常见的考题,单例模式绝对是笔试中的常考题~~~

      一般来说,可以这么写(c#)(根本不怎么懂c#...-_-!):

     

 1 public sealed class Singleton
 2     {
 3          private Singleton()
 4          {}
 5           private static Singleton instance=null;
 6           public static Singleton instance
 7             {
 8                      get    {
 9                            if(instance==null) 
10                                   instance=new Singleton();
11                              return instance;
12                              }
13                  }
14     }

    具体因为啥,别问我,问了我也不告诉你,哈哈,开玩笑,确实比较基础,我都不好意思跟你们讲,上面的这个程序基本上没问题,但不是面试官愿意看到的,

因为不是多线程安全的,如果:两个线程同时运行到if语句处,那么判断后instance为空,两个线程同时创建一个实例,这就不满足单例模式了。

下面是多线程安全的版本

public sealed class Singleton
{
   private Singleton(){}

   private static object syncObj=new object();

   private static Singleton instance=null;
   
   public static Singleton Instance
{
      get
     {
         if(instance==null)
        {
             lock(syncObj)
                {
                  if(instance==null)
                 instance=new singleton();
              }
         }
     return instance;
}

利用上锁的同步机制,保证同一个时刻只用一个线程可以得到同步锁,另一个线程只用等待,保证了多线程的安全性,而且,程序效率较高。

posted @ 2012-09-22 11:59  孙铭泽  Views(253)  Comments(0)    收藏  举报