C++单例模式 终极解决方案 多线程
2016-08-31 18:07
288 查看
不废话 贴代码!
#include<iostream>
#include<mutex>
class Singleton{
private:
static Singleton* instance;
static std::mutex mutex;
Singleton(){}
Singleton(const Singleton& s);
Singleton& operator=(const Singleton& s);
public:
static Singleton* getInstance(){//静态函数 因为不能通过对象调用!
if (instance==NULL){
mutex.lock();
}
if (instance == NULL){
static Singleton s;
instance = &s;
mutex.unlock();
}
return instance;
}
};
Singleton* Singleton::instance = NULL;
std::mutex Singleton::mutex ;
int main(){
Singleton* S1 = Singleton::getInstance();
Singleton* S2 = Singleton::getInstance();
if(S1==S2){
std::cout << "只有一个实例!" << std::endl;
}
system("pause");
}
解决了动态释放的问题,并且加了双锁,解决了多线程的问题!不用动态创建对象,用static,保证了单一性也保证了不被销毁的问题!
顶
#include<iostream>
#include<mutex>
class Singleton{
private:
static Singleton* instance;
static std::mutex mutex;
Singleton(){}
Singleton(const Singleton& s);
Singleton& operator=(const Singleton& s);
public:
static Singleton* getInstance(){//静态函数 因为不能通过对象调用!
if (instance==NULL){
mutex.lock();
}
if (instance == NULL){
static Singleton s;
instance = &s;
mutex.unlock();
}
return instance;
}
};
Singleton* Singleton::instance = NULL;
std::mutex Singleton::mutex ;
int main(){
Singleton* S1 = Singleton::getInstance();
Singleton* S2 = Singleton::getInstance();
if(S1==S2){
std::cout << "只有一个实例!" << std::endl;
}
system("pause");
}
解决了动态释放的问题,并且加了双锁,解决了多线程的问题!不用动态创建对象,用static,保证了单一性也保证了不被销毁的问题!
顶
相关文章推荐
- 懒汉式单利模式多线程终极解决方案
- Flex和Bison的C++可重进入—多线程解决方案
- 多线程下的C++ 单例模式
- C#调用C++封装的DLL传递结构体数组的终极解决方案
- c++终极单例模式。
- C++模式设计-多线程下的单例模式
- C++多线程面向对象解决方案
- 单例模式-多线程解决方案2
- C++实现多线程安全的单例模式 已测试
- C++实现多线程安全的单例模式
- c++多线程单例模式实现
- C++实现多线程安全的单体模式(Singleton)
- c++ 单例模式多线程竞态条件
- C++多线程面向对象解决方案
- Unity 使用C/C++ 跨平台终极解决方案(PC,iOS,Android,以及支持C/C++的平台)
- 两种模式多线程的解决方案[2004年4月29日 10:53]
- C++多线程面向对象解决方案
- C++多线程面向对象解决方案
- C#调用C++DLL传递结构体数组的终极解决方案
- 单例模式的多线程安全支持(C++)