您的位置:首页 > 其它

单例模式(饿汉模式和懒汉模式)

2018-03-16 10:06 218 查看
//饿汉模式

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: