线程安全的单例模式

下列程序是基于多线程下的互斥量锁进行的单例模式。

<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 << "我的实例内存地址是:" << this << endl;

}

SingleInstance::SingleInstance()

{

std::cout << "构造函数" << std::endl;

}

SingleInstance::~SingleInstance()

{

std::cout << "析构函数" << 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>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概念:java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。单例模式有一...
    can_4999阅读 257评论 0 0
  • 简介 单例模式是很常用的一种设计模式,在实现过程中要非常注意线程安全,我们会介绍四种方式来实现线程安全的单例模式:...
    Kai_Z阅读 2,367评论 3 1
  • 1.饿汉式 实现代码: public class MySingleton { // 1.饿汉式 private s...
    JackEason阅读 1,447评论 1 0
  • 单例模式,保证一个类仅有一个实例,并提供一个访问它们的全局访问点。而在多线程的环境下,如果多个线程调用getIns...
    星月西阅读 177评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,566评论 16 22