6. 单件模式
来源:互联网 发布:js判断select是否选中 编辑:程序博客网 时间:2024/06/03 13:17
单件模式的特点很鲜明,确保在整个系统中只能实例化一个对象,并提供全局访问点。并且在下面的写法(1)和(3)中是在使用的时候才去创建对象,“延时实例化”,对于很占内存的对象来讲是有利的。当然在使用它的时候要考虑多线程的问题。
总结起来有三种写法:
(1)加锁,因为加了lock,只能有一个线程获取到这个lock,其他的线程只能等待。所以在对性能要求不高的时候可以使用。
class Singleton{private: static Singleton *uniqueSingleton;public: static Singleton GetInstance() { Lock lock; if(uniqueSingleton == NULL) uniqueSingleton = new Singleton(); return uniqueSingleton; }};(2)在初始化对象时,先创建singleton对象。这样就避免了多线程带来的问题。只是不能延时创建对象。
class Singleton{private: static Singleton *uniqueSingleton = new Singleton();public: static Singleton GetInstance() { return uniqueSingleton; }};(3)双检查锁+volatile, 注意要防止双检查锁失效
class Singleton{private: static volatile Singleton *uniqueSingleton;public: static Singleton GetInstance() { if(uniqueSingleton == NULL) { Lock lock; if(uniqueSingleton == NULL) uniqueSingleton = new Singleton(); } return uniqueSingleton; }};
参考文献:
阅读全文
0 0
- 6. 单件模式
- 单件模式
- 单件模式
- 设计模式-单件
- singleton单件模式
- Singleton (单件模式)
- 单件模式(Singleton)
- 一番话:单件模式
- 单件模式
- 单件模式
- 单件模式
- 单件模式
- 单件模式
- 单件模式
- singleton 单件模式
- 单件模式
- 一、单件模式
- 单件模式_C++
- cocos2dx mac开发环境搭建
- python-opencv:ImportError: numpy.core.multiarray failed to import
- 使用集合实现注册登陆功能,第一步: 提示用户选择功能, A(注册) B(登陆) 。 要求: 功能选择 的时候要忽略大小写。
- r入门练习(一)
- 最小的k个数和multiset\reverse_iterator\const_iterator用法
- 6. 单件模式
- CF 869 A. The Artful Expedient【异或】
- 浅谈分布式服务协调技术 Zookeeper
- CF 869 B. The Eternal Immortality【数学】
- GiD初步使用
- Java工程师路线规划
- sql语句汇总
- Qt5美化界面1——标签设置图片(含GIF)
- 实数系与实数定理