singleton模式与double-checked Locking模式
5月 4, 2008 – 11:10 下午singleton是一个十分常用的模式,也十分简单.不过到现在才知道这种模式叫singleton模式.
现在把singleton模式做一下记录.
模式意图:
保证一个类仅有一个实例,并提供一个访问它的全局访问点.
问题:
几个不同的客户对象需要引用一个对象.而且希望确保这种类型的对象数目不超过1个
实现原理:
1.添加一个类的私有的静态成员变量,引用所需的对象.
2.添加一个公共的静态方法,它在成员变量的值为null时实例化这个类,然后返回成员变量的值.
3.将构造函数的状态设置为保护或私有,从而防止任何人实例化这个类,绕过静态构造函数的机制
Singleton模式的C++片段
- class SingletonTest{
- private static Singleton s_instance;
- private Singleton(){}
- public static SingletonTest getInstance(){
- if(NULL == s_instance){
- s_instance = new SingletonTest;
- return s_instance;
- }
- }
- }
在多线程模式下,singleton模式不能总是正常工作.
Double-cheched Locking是singletonr 的一种变体.仅适用于多线程模式.
此模式的特点:
1.在创建对象之前,添加一次检查,避免不必要的锁定
2.支持多线程环境
- class DCL{
- private static DCL s_instance;
- private DCL(){}
- public static DCL getInstance(){
- if(NULL == s_instance){
- synchronized(this){
- if(null == s_instance){
- s_instance = new DCL();
- }
- }
- }
- }
- private synchronized static void doSync()
- {
- if(NULL ==s_instance)s_instance = new DCL();
- }
- }
2 Responses to “singleton模式与double-checked Locking模式”
兄弟是搞c++的是么
正想多学点东西呢
我是做java web方面的
[回复此评论]
果沟 reply on 5月 6, 2008:
呵呵!我做过C++,两年.目前主要做lamp开发
[回复此评论]
By 阿草哥 on May 6, 2008