//饿汉模式
#include <iostream>
using namespace std;
class singleton
{
private:
singleton()//构造函数私有化
{
}
public :
static singleton *GetInstance()
{
m_count++;
return m_instance;
}
static void Release()
{
if (m_count >= 1)
m_count--;
if (m_instance != NULL && m_count == 0)
{
delete m_instance;
m_instance = NULL;
}
}
private:
static int m_count;//引用计数
static singleton *m_instance;
};
int singleton::m_count = 0;
singleton *singleton::m_instance = new singleton;
int main()
{
singleton *p1 = singleton::GetInstance();
singleton *p2 = singleton::GetInstance();
if (p1 == p2)
cout << "同一个对象" << endl;//结果打印这句话
else
cout << "不同对象" << endl;
singleton::Release();
singleton::Release();
return 0;
}
//懒汉模式
#include <iostream>
#include <pthread.h>
using namespace std;
class singleton
{
private:
singleton()
{
}
public :
static singleton *GetInstance()
{
if (m_instance == NULL)
{
pthread_mutex_lock(&m_mutex);//上锁
if (m_instance == NULL)
m_isntance = new singleton;
pthread_mutex_unlock(&m_mutex);//解锁
}
m_count++;
return m_instance;
}
static void Release()
{
if (m_count >= 1)
m_count--;
if (m_instance != NULL && m_count == 0)
{
delete m_instance;
m_instance = NULL;
}
}
private:
static int m_count;//引用计数
static pthread_mutex_t m_mutex;
static singleton *m_instance;
};
int singleton::m_count = 0;
pthread_mutex_t singleton::m_mutex = PTHREAD_MUTEX_INITIALIZER;
singleton *singleton::m_instance = NULL;
void *work(void*)
{
singleton *p = singleton::GetInstance();
}
int main()
{
pthread_t id[10];
for (int i = 0; i < 10; i++)
{
pthread_create(&id[i], NULL, work, NULL);
//线程分离
pthread_detach(id[i]);
}
pthread_exit(NULL);
return 0;
}