单例设计模式
class MyCAS {
private:
MyCAS() {}
private:
static MyCAS *instance;
public:
static MyCAS *GetInstance()
{
if (instance == NULL)
{
instance = new MyCAS();
static MyCAS_Recover cl;
}
return instance;
}
class MyCAS_Recover //释放内存
{
public:
~MyCAS_Recover()
{
if (MyCAS::instance)
{
delete MyCAS::instance;
MyCAS::instance = NULL;
}
}
};
void fun()
{
cout << &instance << endl;
}
};
//静态成员初始化
MyCAS *MyCAS::instance = NULL;
int main()
{
MyCAS *p_a=MyCAS::GetInstance();
MyCAS *p_b = MyCAS::GetInstance();
p_a->fun();
p_b->fun();
return 0;
}
引入线程的概念
static mutex resource_mutex;
class MyCAS {
private:
MyCAS() {}
private:
static MyCAS *instance;
public:
static MyCAS *GetInstance()
{
//提高效率
if (instance == NULL)
{
unique_lock<mutex> mymutex(resource_mutex);
if (instance == NULL)
{
instance = new MyCAS();
static MyCAS_Recover cl;
}
}
return instance;
}
class MyCAS_Recover //释放内存
{
public:
~MyCAS_Recover()
{
if (MyCAS::instance)
{
delete MyCAS::instance;
MyCAS::instance = NULL;
}
}
};
void fun()
{
cout << &instance << endl;
}
};
//静态成员初始化
MyCAS *MyCAS::instance = NULL;
void mythread()
{
MyCAS *p_a = MyCAS::GetInstance();
}
int main()
{
std::thread thread_1(mythread);
std::thread thread_2(mythread);
thread_1.join();
thread_2.join();
return 0;
}
std::call_once():能够保证函数A只被调用一次。
static mutex resource_mutex;
once_flag o_f;
class MyCAS {
private:
MyCAS() {}
private:
static MyCAS *instance;
static void CreateInstance()
{
instance = new MyCAS();
static MyCAS_Recover cl;
}
public:
static MyCAS *GetInstance()
{
call_once(o_f, CreateInstance);
return instance;
}
class MyCAS_Recover //释放内存
{
public:
~MyCAS_Recover()
{
if (MyCAS::instance)
{
delete MyCAS::instance;
MyCAS::instance = NULL;
}
}
};
void fun()
{
cout << &instance << endl;
}
};