在c++工程中,单例模式是一个非常简单的设计模式,尤其在工业软件solver中,前处理数据(网格、求解、逻辑)一般都是通过单例实现在整个工程中的访问,这里还需要考虑HPC的问题。
作者刚参加工作、学习c++一年,这里只是一个简单的线程安全的单例模板,请大佬批评!
#ifndef _MAIN_H
#define _MAIN_H
#include <iostream>
#include <mutex>
#define SIGLELINK GetInstance();
class A
{
public:
A(void) {};
~A(void) {}
private:
std::shared_ptr<A> m_instance;
protected:
static std::mutex& GetMutex();
public:
std::shared_ptr<A> GetInstance();
};
#endif
#include"main.h"
std::shared_ptr<A> A::m_instance = nullptr;
std::mutex& GetMutex()
{
std::mutex mu;
return mu;
}
std::shared_ptr<A> A::GetInstance()
{
if(m_instance.get() == nullptr)
{
std::lock_guard<std::mutex> lock(GetMutex());
if(m_instance.get() == nullptr)
{
m_instance = std::shared_ptr<A>(new A);
}
}
return m_instance;
}