C++ 实现单例模式 多线程
来源:互联网 发布:淘宝玩具店铺名字 编辑:程序博客网 时间:2024/06/09 23:36
http://buptdtt.blog.51cto.com/2369962/975101
- //Singleton.h
- #ifndef _SINGLETON_H_
- #define _SINGLETON_H_
- #include <iostream>
- #include <pthread.h>
- using namespace std;
- class locker
- {
- public:
- inline locker(){ pthread_mutex_init(&mutex,NULL);}
- inline ~locker(){ pthread_mutex_destroy(&mutex);}
- inline void lock(){ pthread_mutex_lock(&mutex);}
- inline void unlock(){ pthread_mutex_unlock(&mutex);}
- private:
- pthread_mutex_t mutex;
- };
- class Singleton
- {
- public:
- static Singleton* Instance();
- private:
- Singleton();
- static Singleton * m_pInstance;
- class Garbo//删除Singleton实例的对象
- {
- public:
- ~Garbo()
- {
- if(Singleton::m_pInstance)
- {
- delete Singleton::m_pInstance;
- }
- }
- };
- static Garbo gb;//在程序结束时,系统会调用它的析构函数
- };
- #endif //~_SINGLETON_H_
- //Singleton.cpp
- #include "Singleton.h"
- #include <iostream>
- using namespace std;
- Singleton* Singleton::m_pInstance = 0;
- Singleton::Singleton()
- {
- cout<<"Singleton...."<<endl;
- }
- Singleton* Singleton::Instance()
- {
- if(NULL == m_pInstance)
- {
- locker llock;
- llock.lock();
- if(NULL == m_pInstance)
- {
- m_pInstance = new Singleton();
- }
- llock.unlock();
- }
- return m_pInstance;
- }
- //main.cpp
- #include "Singleton.h"
- #include <iostream>
- using namespace std;
- int main(int argc,char* argv[])
- {
- Singleton* sgn = Singleton::Instance();
- return 0;
- }
- 将构造函数声明为private,防止被实例化。用一个静态成员变量和静态函数实现唯一的对象构造。在静态函数中new了空间,所以用内嵌的成员对象的析构函数来释放内存。为了多线程安全,在建对象之前先加锁,完成后拆锁。
- objective c - 单例模式(多线程)
- c语言多线程单例模式
- C++ 实现单例模式 多线程
- 多线程单例模式的安全实现
- 多线程下实现单例模式
- c++多线程单例模式实现
- 设计模式--单例模式 C++实现
- 多线程单例模式
- Objective C 中实现单例模式
- Objective C 实现Singleton(单例)模式.
- Objective-C实现单例模式
- 【Objective-C】单例模式的实现
- objective-C 实现单例模式
- 单例模式代码实现(C++)
- 单例模式 (C语言实现)
- Objective-C实现单例模式
- Objective-C单例模式实现
- Objective-C 单例模式的实现
- OpenNI安装及下载
- MVCC
- XML
- Day05第五天java基础----------面向对象
- 重拾遗忘-编程基础-C++
- C++ 实现单例模式 多线程
- 求和式 (C++ 坑爹的<<,>>,%lld)
- 写尽自己一个人的孤独,却写不出心里的寂寞
- strtotime那些事
- ORACEL关于表解锁
- iOS 5中的strong和weak关键字
- vb.net 交错 处理 一年中的月份天数的输出
- 用do while{0}定义宏来定义函数
- rank,dense_rank,row_number使用和区别