单例模式
来源:互联网 发布:只有我知 编辑:程序博客网 时间:2024/05/16 18:47
单例模式:保证类只有一个实例且类易于外界访问,从而方便对实例个数的控制以及节约系统资源
参加《剑指offer》
#include <iostream>using namespace std;class singleton{ private: singleton(){}; static singleton* Inst; public: static singleton* getIns(){ if(NULL == Inst){ Inst = new singleton(); printf("this is called\n"); } return Inst; }};singleton* singleton::Inst = NULL;int main(){ singleton *ins = singleton::getIns(); system("pause"); }
多线程版本1:
#include <iostream>using namespace std;class singleton{ private: singleton(){}; static singleton* Inst; public: static singleton* getIns(){ lock(); if(NULL == Inst){ // 得到锁后,只有当Inst为空时,才会去初始化实例 Inst = new singleton(); printf("this is called\n"); } unlock(); return Inst; }};singleton* singleton::Inst = NULL;int main(){ singleton *ins = singleton::getIns(); system("pause"); }
由于每个线程去访问都要先获得锁,然后在检查Inst是否为空,在解锁,加锁成本非常高,优化见
多线程版本2:
#include <iostream>using namespace std;class singleton{ private: singleton(){}; static singleton* Inst; public: static singleton* getIns(){ if(NULL == Inst){ // 只有Inst是NULL时,线程才会去创建对象的实例,所以加入延迟初始的策略 lock(); if(NULL == Inst){ Inst = new singleton(); printf("this is called\n"); } unlock(); } return Inst; }};singleton* singleton::Inst = NULL;int main(){ singleton *ins = singleton::getIns(); system("pause"); }
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- 解决openwrt报“Too many open files”错误的方法
- android实现耳机插入和拔出状态检测
- Linux Socket编程(不限Linux)
- DDoS攻防战 (二) :CC攻击工具实现与防御理论
- Spring - 使用ApplicationContextAware得到一个ApplicationContext对象
- 单例模式
- WingIDE注册破解方法
- JNI学习积累之一 ---- 常用函数大全
- cmd下查看SharedPreferences和SQLite
- 关于crontab的使用详解
- 手势
- HDU 4380 Farmer Greedy 极角排序 DP
- android 数组资源
- 避免系统休眠后线程休眠