mutex m_silver;
std::once_flag m_flag;
class Singleton
{
static void Create_Instance()
{
cout << "Create_Instance() ing!" << endl;
m_S_ton = new Singleton();
static Singleton_Recharge cl;
}
public:
static Singleton* Get_Instance()
{
//提高效率
if (m_S_ton == NULL) //双重锁定
{
unique_lock<mutex> m_unique(m_silver);
if (m_S_ton == NULL)
{
m_S_ton = new Singleton();
static Singleton_Recharge cl;
}
}
//一个线程会等待另外一个线程执行完Create_Instance
//std::call_once(m_flag, Create_Instance);
return m_S_ton;
}
class Singleton_Recharge
{
public:
~Singleton_Recharge()
{
if (Singleton::m_S_ton)
{
delete Singleton::m_S_ton;
Singleton::m_S_ton = NULL;
}
}
};
void func()
{
cout << "Singleton test" << endl;
}
private:
Singleton(){}
private:
static Singleton* m_S_ton;
};
Singleton* Singleton::m_S_ton = NULL;
void mythread()
{
cout << "my thread starting" << endl;
Singleton* ptr = Singleton::Get_Instance();
ptr->func();
cout << "my thread finished" << endl;
return;
}
void main_test()
{
thread myobj(mythread);
thread myobj1(mythread);
myobj.join();
myobj1.join();
cout << "main finished" << endl;
}
##建议先在主线程中将单例初始化