#include <iostream>
#include <pthread.h>
using namespace std;
template <typename T>
class singleton
{
public:
static T* GetInstance()
{
if(pInstance == NULL) /*check the first time*/
{
pthread_mutex_lock(&mutex); /*lock it*/
if(pInstance == NULL) /*check again in case that other thread had generate the instance when we lock mutex*/
{
pInstance = new T;
}
}
return pInstance;
}
protected:
singleton(){}
virtual ~singleton(){pInstance = NULL;}
private:
static T* pInstance;
static pthread_mutex_t mutex;
};
template<typename T>
T* singleton<T>::pInstance = NULL;
template<typename T>
pthread_mutex_t singleton<T>::mutex = PTHREAD_MUTEX_INITIALIZER;
class mysingleton : public singleton<mysingleton>
{
private: /*private here*/
friend class singleton<mysingleton>;
mysingleton(){}
virtual ~mysingleton(){}
public:
void testFunc(){cout<<"Message from testFunc()"<<endl;}
void setMyPrivateData(int num){myPrivateData = num;}
void printMyPrivateData(){cout<<myPrivateData<<endl;}
private:
int myPrivateData;
};
int main()
{
mysingleton* pMysingleton = mysingleton::GetInstance();
pMysingleton->testFunc();
pMysingleton->setMyPrivateData(100);
pMysingleton->printMyPrivateData();
mysingleton* pMysingleton2 = mysingleton::GetInstance();
pMysingleton2->testFunc();
pMysingleton2->printMyPrivateData();
pMysingleton2->setMyPrivateData(10);
pMysingleton->printMyPrivateData();
return 0;
}
实现一个singleton
最新推荐文章于 2019-09-04 23:16:53 发布