设计模式 - SingleToned单例模式
来源:互联网 发布:买衣服 知乎 编辑:程序博客网 时间:2024/06/08 13:54
1. 简单描述
单例模式保证了一个类(在同一进程中)只有一个实例。
单例模式有多种形式:懒汉(又分为线程安全,线程不安全)在第一次使用时创建实例;饿汉(线程安全)在第一次使用前就创建了实例;双重检测则类似线程安全的懒汉模式,在加锁前多加一次指针判空提高效率。
2.实例程序(双重检测)
#include <iostream>#include "AutoLock.h"using namespace std;class SingleTone{public: static SingleTone* getInstance(); void func();private: SingleTone(){}; SingleTone(const SingleTone&){}; ~SingleTone(){};private: static SingleTone* m_instancePtr; static pthread_mutex_t m_mutex;};SingleTone* SingleTone::m_instancePtr = NULL;pthread_mutex_t SingleTone::m_mutex = PTHREAD_MUTEX_INITIALIZER;SingleTone* SingleTone::getInstance(){ if (NULL == m_instancePtr) { AutoLock __lock(&m_mutex); if (NULL == m_instancePtr) { cout<<"create."<<endl; m_instancePtr = new SingleTone(); } } return m_instancePtr;}void SingleTone::func(){ cout<<"succeed !"<<endl;}int main(int argc, char const *argv[]){ /* code */ SingleTone* stPtr = SingleTone::getInstance(); if (NULL == stPtr) { cout<<"error"<<endl; return -1; } stPtr->func(); return 0;}
程序中使用了AutoLock进行加锁,简单的AutoLock实现可以参考另一篇文章 <简单的AutoLock>。
0 0
- 设计模式 - SingleToned单例模式
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 设计模式-单例模式
- [设计模式] 单例模式
- 设计模式--单例模式
- 设计模式---单例模式
- 设计模式--单例模式
- 设计模式 -----单例模式
- usaco3.3.3 Camelot
- VB封装DLL实例(三)
- 粉刷(paint)
- error: ‘gnu_inline’ attribute present on ‘libc_name_p’
- Custom View
- 设计模式 - SingleToned单例模式
- 最大公约数和最小公倍数
- 随笔
- 1091_棋盘游戏
- 1月18日(作业2)
- 用Hashcat每秒计算1.4亿个密码,破解隔壁WIFI密码
- [Windows7] 修改安装程序目录 - 选择默认程序问题(打不开)
- 使用AJAX完成用户名是否存在异步校验
- 人工智能免费入门课程