下列程序是基于多線程下的互斥量鎖進行的單例模式胳喷。
<code>
class SingleInstance
{
public:
static SingleInstance* GetInstance();
static void deleteInstance();
void Print();
private:
SingleInstance();
~SingleInstance();
SingleInstance(const SingleInstance& signal);
const SingleInstance &operator=(const SingleInstance& signal);
private:
static SingleInstance* m_instance;
static mutex mymutex;
};
SingleInstance* SingleInstance::m_instance = nullptr;
mutex SingleInstance::mymutex;
SingleInstance* SingleInstance::GetInstance()
{
if (!m_instance)
{
unique_lock<mutex>lock(mymutex);
if (!m_instance)
{
m_instance = new SingleInstance();
}
}
return m_instance;
}
void SingleInstance::deleteInstance()
{
unique_lock<mutex>lock(mymutex);
if (m_instance)
{
delete m_instance;
m_instance = nullptr;
}
}
void SingleInstance::Print()
{
cout << "我的實例內(nèi)存地址是:" << this << endl;
}
SingleInstance::SingleInstance()
{
std::cout << "構(gòu)造函數(shù)" << std::endl;
}
SingleInstance::~SingleInstance()
{
std::cout << "析構(gòu)函數(shù)" << std::endl;
}
void test0()
{
cout << "test0的線程id為: " << this_thread::get_id() << endl;
for (int i = 0; i < 5; ++i)
{
SingleInstance* single = SingleInstance::GetInstance();
single->Print();
}
}
void test1()
{
cout << "test1的線程id為: " << this_thread::get_id() << endl;
for (int i = 0; i < 5; ++i)
{
SingleInstance* single1 = SingleInstance::GetInstance();
single1->Print();
}
}
</code>