[C++设计模式] singleton 单例模式
2024-09-04 21:03:24
这个设计模式主要目的是想在整个系统中仅仅能出现一个类的实例。这样做当然是有必定的。比方你的软件的全局配置信息,或者是一个Factory,或是一个主控类,等等。
你希望这个类在整个系统中仅仅能出现一个实例。
一、调用pthread_once()实现了一个线程安全的版本号:
pthread_once()函数具体解释
代码:
template <class T>
class Singleton
{
public:
static T& instance()
{
pthread_once(&ponce_,&Singleton::init);
return *value_;
}
static void init()//加了一层封装,适应不同类型的初始化函数
{
value_ = new T();
}
private:
Singleton();
~Singleton();
static pthread_once_t ponce_;
static T * value_;
};
template <class T>
pthread_once_t Singleton<T>::ponce_=PTHREAD_ONCE_INIT;//Linux下初始化为0; template <class T>
T* Singleton<T>::value_=NULL;
二、双重检查加锁法
class Singleton
{
public:
static Singleton *GetInstance()
{
if (m_Instance == NULL )
{
Lock lock; // Lock为管理相互排斥锁的资源类,会在该函数退出时自己主动释放
if (m_Instance == NULL )
{
m_Instance = new Singleton ();
} }
return m_Instance;
} static void DestoryInstance()
{
if (m_Instance != NULL )
{
delete m_Instance;
m_Instance = NULL ;
}
} int GetTest()
{
return m_Test;
} private:
Singleton(){ m_Test = 0; }
static Singleton *m_Instance;
int m_Test;
}; Singleton *Singleton ::m_Instance = NULL;
双重检查加锁的优势在于:
(1)没有实例化Singleton时,全部调用静态函数GetInstance的线程都会堵塞在lock上,仅仅有第一个调用者能获取该lock,实例化该类。
(2)已经实例化Singleton时。全部调用者线程就不用排队获取lock。直接获取实例化对象
最新文章
- Java动态编译
- 从零学java--传智播客
- html选中文字 背景/字 变色
- 拓扑排序(二)之 C++详解
- RedHat版的linux安装yum源及redis
- Xcode连接git@osc
- Java入门到精通——开篇
- Python学习 - 使用BeautifulSoup来解析网页一:基础入门
- Laravel 简单使用七牛云服务
- 对pathtracing的一些个人理解
- video视频铺满
- Ubuntu 环境 TensorFlow (最新版1.4) 源码编译、安装
- Feature Preprocessing on Kaggle
- JVM进程启动会启动哪些线程?
- php通过某个日期段的周几,获取选中周几对应的日期
- django管理后台添加admin账号
- 利用cygwin创建windows下的crontab定时任务
- 继承自NSObject的不常用又很有用的函数(1)
- Generalized normal distribution and Skew normal distribution
- div 标签
热门文章
- ubuntu16下安装telnet和opensshserver
- 关于python浮点数的精度问题。
- 实现如下语法的功能:var a = add(2)(3)(4); //9
- 牛客网 暑期ACM多校训练营(第二场)D.money-贪心 or 动态规划
- Python的程序结构[2] ->; 类/Class[3] ->; 内建类与内建函数
- Google Kickstart Round E 2018 B. Milk Tea
- postgres表空间、模式、表和用户/角色之间的关系
- Xamarin XAML语言教程通过ProgressTo方法对进度条设置
- 线程同步工具之CountDownLatch
- [android]加载大量图片避免OOM