单例模式
来源:互联网 发布:caro emerald知乎 编辑:程序博客网 时间:2024/05/16 14:25
单例模式
定义: 在程序运行中, 只能生成一个对象 的模式
模式要点: 1, 为了保证在 外部 不被定义对象, 需要把构造函数设置成私有属性
2, 故此, 需要一个static函数来定义对象, 又因唯一性, 需要一个static指针变量来保证不重复 创建
3, 虽然唯一, 但可以被多个函数或对象公用, 为防止在销毁时 多次释放同一指针 , 需要一个static整形变量计数
4,为防止多个线程同时调用,引起的线程不安全, 需要一个互斥锁, 锁住static指针变量, 故锁也是static属性
5,仅在第一次创建的时候需要调用互斥锁, 为防止多次调用内核, 因在前面再加一次判断
下面是代码是例
#include <iostream>#include <pthread.h>using namespace std;// 懒汉式单例class UserManage{private:UserManage(){cout << "用户管理器被构造" << endl;sleep(5);}public:static UserManage * GetInstance()//创造句柄{count ++;if(m_instance == NULL) // 判断, 防止多次开锁解锁{pthread_mutex_lock(&mutex);// 上锁if(m_instance == NULL)m_instance = new UserManage; // 构造pthread_mutex_unlock(&mutex);// 解锁}return m_instance;}static void Release()// 释放句柄{count --;pthread_mutex_lock(&mutex);if(m_instance != NULL && count == 0){delete m_instance;m_instance = NULL;}pthread_mutex_unlock(&mutex);}private:static pthread_mutex_t mutex;static UserManage * m_instance;static int count;};
//静态变量 需要在外部初始化
UserManage * UserManage::m_instance = NULL;int UserManage::count = 0;pthread_mutex_t UserManage::mutex = PTHREAD_MUTEX_INITIALIZER; void *func(void* v){UserManage *um = UserManage::GetInstance();//UserManage::Release();}int main(){pthread_t id[10];for(int i = 0; i<10; i++){pthread_create(&id[i], NULL, func, NULL);pthread_detach(id[i]); }pthread_exit(NULL); // 终止主线程return 0;}
阅读全文
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- jvm系列(十):如何优化Java GC「译」
- 冒泡排序
- ps aux|grep xxx
- 单片机串口通信
- (11)oracle新人笔记------集合运算
- 单例模式
- h5新增文件图片上传
- 保护装置信息访问功能
- 工厂三兄弟之简单工厂模式(三)
- LaTeX新人教程,30分钟从完全陌生到基本入门
- Linux ALSA声卡驱动之一:ALSA系统架构
- Python--常用字符串操作方法
- C#可空类型
- 利用JDK中的jarsgner 给android Apk空白包签名并进行认领应用等