Singleton.h
#ifndef __DANLI_H_
#define __DANLI_H_
#include <string>
#include <iostream>
#include <pthread.h>
using namespace std;
//单例模式-->饿汉
/*class Singleton
{
private:
Singleton();
string _name;
static Singleton *_psingleton;
public:
static Singleton* GetInstance();
void SetName(string val);
string GetName();
void DisplayName();
private:
class SingletonGC
{
public:
~SingletonGC()
{
if(_psingleton != NULL)
{
delete _psingleton;
_psingleton = NULL;
cout << "DELETE END" << endl;
}
}
};
static SingletonGC s_signletonGC;//释放单例
};
*/
//单例模式-->懒汉
class Singleton
{
private:
Singleton();
string _name;
static Singleton *_psingleton;
public:
void SetName(string val);
string GetName();
void DisplayName();
static Singleton *GetInstance();
static pthread_mutex_t _mutex;
class SingletonGC
{
public:
~SingletonGC()
{
pthread_mutex_lock(&_mutex);
if(_psingleton != NULL)
{
delete _psingleton;
_psingleton = NULL;
cout << "DELETE END" << endl;
}
pthread_mutex_unlock(&_mutex);
pthread_mutex_destroy(&_mutex);
}
};
static SingletonGC s_singletonGC;//释放单例
};
#endif//__DANLI_H_
//
Singleton.cpp
#ifndef __DANLI_H_
#define __DANLI_H_
#include <string>
#include <iostream>
#include <pthread.h>
using namespace std;
//单例模式-->饿汉
/*class Singleton
{
private:
Singleton();
string _name;
static Singleton *_psingleton;
public:
static Singleton* GetInstance();
void SetName(string val);
string GetName();
void DisplayName();
private:
class SingletonGC
{
public:
~SingletonGC()
{
if(_psingleton != NULL)
{
delete _psingleton;
_psingleton = NULL;
cout << "DELETE END" << endl;
}
}
};
static SingletonGC s_signletonGC;//释放单例
};
*/
//单例模式-->懒汉
class Singleton
{
private:
Singleton();
string _name;
static Singleton *_psingleton;
public:
void SetName(string val);
string GetName();
void DisplayName();
static Singleton *GetInstance();
static pthread_mutex_t _mutex;
class SingletonGC
{
public:
~SingletonGC()
{
pthread_mutex_lock(&_mutex);
if(_psingleton != NULL)
{
delete _psingleton;
_psingleton = NULL;
cout << "DELETE END" << endl;
}
pthread_mutex_unlock(&_mutex);
pthread_mutex_destroy(&_mutex);
}
};
static SingletonGC s_singletonGC;//释放单例
};
#endif//__DANLI_H_
//
singleton_main.cpp
#include <iostream>
#include <pthread.h>
#include <string>
#include <unistd.h>
#include "Singleton.h"
void *ThreadFunction(void *arg)
{
string val = (string)((char *)arg);
while(true)
{
Singleton::GetInstance()->SetName(val);
cout << "th_id->" << pthread_self() << "-->name-->" << Singleton::GetInstance()->GetName() << endl;
sleep(2);
}
return (void *)0;
}
int main()
{
pthread_t thid;
pthread_create(&thid,NULL,&ThreadFunction,(void *)("aaa"));
pthread_create(&thid,NULL,&ThreadFunction,(void *)("bbb"));
pthread_create(&thid,NULL,&ThreadFunction,(void *)("ccc"));
pthread_create(&thid,NULL,&ThreadFunction,(void *)("ddd"));
pthread_create(&thid,NULL,&ThreadFunction,(void *)("eee"));
int ch;
do
{
ch = getchar();
} while (ch!='Q' && ch != 'q');
return 0;
}
编译命令:g++ -o main singleton_main.cpp Singleton.cpp -lpthread