Singleton单例模式
2015-06-22 21:57
246 查看
#include <iostream> #include <windows.h> #include <mutex> using namespace std; std::mutex _sMutex; template<typename Type> class Singleton { public: static Type* GetSigleton() { if (singlen == NULL) { unique_lock<std::mutex> lock(_sMutex);//C++11的加锁语法。 //unique_lock 的生命周期结束之后,它所管理的锁对象会被解锁, if (singlen == NULL) { #ifndef _WIN32 #define _WIN32 #endif Type* tmp = new Type(); MemoryBarrier(); //栅栏让此前的代码执行完才执行后面的,防止CPU优化导致多线程代码执行混乱。 singlen = tmp; //如果直接signlen = new Type();//这里审请空间,调用构造, //赋值三步操作可能混乱。 } } return singlen; } private: static Type *singlen;//防止优化,让每次singlen的取值都是在内存中。 }; template<typename Type> Type * Singleton<Type>::singlen = NULL; class Test { public: void Printf() { cout << "This is Test :: Printf()" << endl; } }; int main() { Singleton<Test> ::GetSigleton()->Printf(); return 0; }
相关文章推荐
- leetcode Edit Distance
- 头
- 有哪些实用的计算机相关技能,可以在一天内学会?
- 升级到Oracle DB 12c之前应该考虑的因素:DB 12c中EM Express 12c的功能减少
- 【数据分析 R语言实战】学习笔记 第八章 方差分析与R实现
- 用于主题检测的临时日志(3ff4b4ce-ac84-4f7c-bd80-ad46aaf77991 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
- 第011讲 选择器使用细节 块元素和行内元素 盒子模型
- UVA 11134 Fabled Rooks 优先队列
- python爬取网易美女图片
- 如何实现一个不规则排列的图片布局算法
- 转:UIView的sizeToFit与sizeThatFits
- 返回一个二维整数数组中最大联通子数组的和
- 计算珠峰的高度
- ubuntu12.04 搭建VI开发环境
- 计算珠峰的高度
- 黑马程序员--定义枚举
- linux drm 架构 之代码分析
- CSU1660: K-Cycle
- Python 爬虫学习 相关类库的介绍
- BZOJ 3531: [Sdoi2014]旅行( 树链剖分 )