首页 > 其他分享 >单例模式

单例模式

时间:2023-04-28 10:00:56浏览次数:32  
标签:Singleton 代码 模式 线程 单例 include 安全性

一、线程安全性的讲解

1、视频截图

 2、线程安全性的代码

加不加临界区进行验证

 1 //!!!!!!!!! 加C++泛型编程与STL开发实战  QQ群:726114806下载代码和交流
 2 #include <afxwin.h>
 3 #include <iostream>
 4 #include <stdio.h>
 5 using namespace std;
 6 
 7 CRITICAL_SECTION g_cs;
 8 class Singleton {
 9 private:
10     Singleton() {
11         m_singer = NULL;
12         cout << "构造一个Singleton对象" << endl;
13     }
14 public:
15     static Singleton* getInstance() { //懒汉式:延迟加载
16         if (m_singer == NULL) {
17             ::EnterCriticalSection(&g_cs);
18             if(m_singer == NULL)
19             m_singer = new Singleton;
20             ::LeaveCriticalSection(&g_cs);
21         }
22         return m_singer;
23     }
24 private:
25     static Singleton* m_singer;
26 };
27 
28 UINT Func(LPVOID) {
29     printf("%x\n", Singleton::getInstance());
30     return 0;
31 }
32 Singleton *Singleton::m_singer = NULL;//new Singleton; 在C++中构造函数不是线程安全的
33 int main(void) {
34     //Singleton *p = new Singleton;
35     /*Singleton* p1 = Singleton::getInstance();
36     Singleton* p2 = Singleton::getInstance();
37     printf("p1=%x,p2=%x", p1, p2);*/
38     ::InitializeCriticalSection(&g_cs);
39     for (int i = 0;i < 10;i++) {
40         AfxBeginThread(Func, NULL);
41     }
42     ::DeleteCriticalSection(&g_cs);
43     system("pause");
44     return 0;
45 }
验证代码

 

标签:Singleton,代码,模式,线程,单例,include,安全性
From: https://www.cnblogs.com/zeliangzhang/p/17361025.html

相关文章

  • 【策略设计模式详解】C/Java/JS/Go/Python/TS不同语言实现
    简介策略模式(StrategyPattern)属于行为型设计模式。将每一个算法封装到具有共同接口的独立类中,根据需要来绑定策略,使得具体实现和策略解耦。当你想使用对象中各种不同的算法变体,使用if...else所带来的复杂和难以维护,可使用策略模式。或者当有许多相同类,它们仅在执行某些行为时......
  • 设计模式-工厂篇(1)
    意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod 使一个类的实例化延迟到其子类。适用性:当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。当类将创建对象的职责委托给多个帮助子类中的某一个,并且......
  • python的设计模式
    设计模式目录设计模式一、什么是设计模式二、python实现设计模式创建型模式1.单例模式2.工厂模式一、什么是设计模式软件工程中,设计模式是指软件设计问题的推荐方案。设计模式一般是描述如何组织代码和使用最佳实践来解决常见的设计问题。需要记住一点:设计模式是高层次的方案,并......
  • cnblogs 简洁模式 All In One
    cnblogs简洁模式AllInOnecnblogs简洁模式,显示文章阅读量总量和博客排名操作步骤打开一个非自己的账号的cnblogs博客首页⚠️注意博客皮肤一定要选择一个与自己的博客皮肤一致的才可以例如:CodingLifehttps://i.cnblogs.com/settingshttps://www.cnblogs.com/ano......
  • Java设计模式-抽象工厂模式
    简介设计模式是软件设计中的一种常见方法,通过定义一系列通用的解决方案,来解决常见的软件设计问题。其中,抽象工厂模式是一种非常常见的设计模式,它可以帮助我们创建一组相关的对象,而不需要指定具体的实现方式。抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关的......
  • 设计模式小结
    简单工厂模式将具有相同属性事物用一个抽象基类,里面具有抽象方法来作为父类,然后其他子类通过继承来实现这个基类,通过重写实现基类里面的抽象方法创建一个工厂方法,通过父类变量来策略模式就是在简单工厂模式的基础上,将工厂方法改成策略对象,然后去调用该对象的重写基类的抽象方法单一......
  • Spring AOP 支持两种模式的动态代理
    SpringAOP支持两种模式的动态代理,JDKProxy或者cglib,jdkproxy:publicclassMyDynamicProxy{publicstaticvoidmain(String[]args){HelloImplhello=newHelloImpl();MyInvocationHandlerhandler=newMyInvocationHandler(hello);......
  • 组合模式:处理树形结构数据
    当我们需要处理树形结构数据时,组合模式(CompositePattern)就会变得非常有用。组合模式允许我们将对象组合成树形结构来表示“整体/部分”的层次结构,使得客户端可以统一地处理单个对象和组合对象。在组合模式中,我们通常会定义一个抽象类或者接口来表示对象,可能会包含添加、删除、遍......
  • 【单例设计模式原理详解】Java/JS/Go/Python/TS不同语言实现
    简介单例模式(SingletonPattern)属于创建型设计模式,这种模式只创建一个单一的类,保证一个类只有一个实例,并提供一个访问该实例的全局节点。当您想控制实例数目,节省系统资源,并不想混用的时候,可以使用单例模式。单例有很多种实现方式,主要分为懒汉和饿汉模式,同时要通过加锁来避免线程......
  • 单例核心点
    1.构造方法是私有的private2.单例方法getInstance是public的保证对外能公开访问3.单例的方法getInstance是static的,保证方法无需实例化获取方法,在类加载时就已创建. 扩展点:1.使用枚举方式的构建单例2.双重锁定时什么样的情况......