1、作用:保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象
2、单例模式的构造图:
3、实现环境:
(1)在多个线程之间,比如初始化一次socket资源
(2)在整个程序空间使用全局变量,共享资源
(3)大规模系统中,为了性能的考虑,需要节省对象的创建时间
4、构造单例模式的常用步骤:
(1)、构造函数私有化
(2)、提供一个全局的静态方法(全局访问点)
(3)、在类中定义一个静态指针,指向本类的变量的静态变量指针
5、懒汉式和饿汉式的线程安全:多线程中会导致多个实例的产生,从而导致运行代码不正确以及内存的泄露
6、单例模式分类及实现:
#include <iostream>
#include <pthread.h>
using namespace std;
class Single
{
private:
Single()
{
cout << "构造函数被调用" << endl;
sleep(1);
}
public:
static Single* GetInstance()
{
if (m_instance == NULL)
{
pthread_mutex_lock(&mutex); // 上锁
if (m_instance == NULL)
m_instance = new Single;
pthread_mutex_unlock(&mutex); // 解锁
}
return m_instance;
}
private:
static pthread_mutex_t mutex;
static Single* m_instance;
};
Single* Single::m_instance = NULL;
pthread_mutex_t Single::mutex = PTHREAD_MUTEX_INITIALIZER;
void *worker(void* v)
{
Single *s = Single::GetInstance();
}
int main()
{
for (int i = 0; i <10; i++)
{
pthread_t thread;
pthread_create(&thread,NULL, worker, NULL);
pthread_detach(thread); // 线程分离
}
pthread_exit(NULL); // 结束主线程
return 0;
}