singleton模式与double-checked Locking模式

5月 4, 2008 – 11:10 下午

singleton是一个十分常用的模式,也十分简单.不过到现在才知道这种模式叫singleton模式.
现在把singleton模式做一下记录.
模式意图:
保证一个类仅有一个实例,并提供一个访问它的全局访问点.
问题:
几个不同的客户对象需要引用一个对象.而且希望确保这种类型的对象数目不超过1个
实现原理:
1.添加一个类的私有的静态成员变量,引用所需的对象.
2.添加一个公共的静态方法,它在成员变量的值为null时实例化这个类,然后返回成员变量的值.
3.将构造函数的状态设置为保护或私有,从而防止任何人实例化这个类,绕过静态构造函数的机制
Singleton模式的C++片段

  1. class SingletonTest{
  2.             private static Singleton s_instance;
  3.             private Singleton(){}
  4.             public static SingletonTest getInstance(){
  5.                 if(NULL == s_instance){
  6.                      s_instance = new SingletonTest;
  7.                      return s_instance;
  8.                }
  9.             }
  10.        }

在多线程模式下,singleton模式不能总是正常工作.
Double-cheched Locking是singletonr 的一种变体.仅适用于多线程模式.
此模式的特点:
1.在创建对象之前,添加一次检查,避免不必要的锁定
2.支持多线程环境

  1. class DCL{
  2.          private static DCL s_instance;
  3.          private DCL(){}
  4.          public static DCL getInstance(){
  5.                 if(NULL == s_instance){
  6.                      synchronized(this){
  7.                             if(null  ==  s_instance){
  8.                                    s_instance = new DCL();
  9.                             }
  10.                      }
  11.                 }
  12.         }
  13.         private synchronized static void doSync()
  14.         {
  15.               if(NULL ==s_instance)s_instance = new DCL();
  16.          }
  17.      }
  1. 2 Responses to “singleton模式与double-checked Locking模式”

  2. 兄弟是搞c++的是么
    正想多学点东西呢
    我是做java web方面的

    [回复此评论]

    果沟 reply on 5月 6, 2008:

    呵呵!我做过C++,两年.目前主要做lamp开发

    [回复此评论]

    By 阿草哥 on May 6, 2008

Post a Comment