当前位置: 首页 > news >正文

镇江网站建设案例杭州平面设计培训

镇江网站建设案例,杭州平面设计培训,wordpress加载图片慢,惊艳的网站一、概述 单例模式也称单态模式#xff0c;是一种创建型模式#xff0c;用于创建只能产生一个对象实例的类。例如#xff0c;项目中只存在一个声音管理系统、一个配置系统、一个文件管理系统、一个日志系统等#xff0c;甚至如果吧整个Windows操作系统看成一个项目#xf…一、概述 单例模式也称单态模式是一种创建型模式用于创建只能产生一个对象实例的类。例如项目中只存在一个声音管理系统、一个配置系统、一个文件管理系统、一个日志系统等甚至如果吧整个Windows操作系统看成一个项目那么其中只存在一个任务管理器窗口等。引入单例模式的实现意图保证一个类仅有一个实例存在同时提供能对该实例访问的全局方法。 二、单例模式分类 1、懒汉模式 1代码示例 class CSingletonImpl { public:     static CSingletonImpl* GetInstance()     {         if (m_pInstance nullptr)         {             m_pInstance new CSingletonImpl;         } return m_pInstance;     } private:     CSingletonImpl(){};     ~CSingletonImpl(){};     CSingletonImpl(const CSingletonImpl the);     CSingletonImpl operator(const CSingletonImpl other); private:     static CSingletonImpl* m_pInstance; }; CSingletonImpl*CSingletonImpl::m_pInstance nullptr; 2说明 单例模式为了防止多对象问题将构造函数析构函数拷贝构造函数赋值运算符函数设置为私有同时设置公有唯一接口方法来创建对象同时定义类静态指针。这是通用方法那么会有什么问题呢如果在单一线程中使用则没什么问题但是在多线程中使用则可能导致问题如果多个线程可能会因为操作系统时间片调度问题切换造成多对象产生那么解决这个问题的方案就是对GetInstance()成员函数枷锁。 示例代码 加入私有成员变量static std::mutex m_mutex; static CSingletonImpl* GetInstance() { m_mutex.lock();  if (m_pInstance nullptr)  {   m_pInstance new CSingletonImpl;  }  m_mutex.unlock(); return m_pInstance; } 加入以上代码没有问题了吗呵呵还不行虽然对接口函数加锁从代码逻辑上没有问题实现了线程安全但是从执行效率上来说是有大问题的。当程序运行中GetInstance()可能会被多个线程频繁调用每次调用都会经历加锁解锁的过程这样的话会严重影响程序执行效率而且加锁机制仅仅对第一次创建对象有意义对象一旦创建则变成只读对象在多线程中对只读对象的访问加锁不仅代价大而且无意义。那么如何解决这个问题呢那就是双重锁定机制基于这种机制函数实现代码 static CSingletonImpl* GetInstance()     {         if (m_pInstance nullptr)         {             std::lock_guardstd::mutex siguard(si_mutex);             if (m_pInstance nullptr)             {                 m_pInstance new CSingletonImpl;             }         }         return m_pInstance;     } 上述双重锁定机制看起来比较完美但实际上存在潜在的问题内存访问重新排序导致双重锁定失效的问题比较推荐的方法时C11新标准的一些特性示例代码如下 #include mutex #include atomic //通过原子变量解决双重锁定底层问题(load,store) class CSingletonImpl { public:     static CSingletonImpl* GetInstance()     {         CSingletonImpl* task m_taskQ.load(std::memory_order_relaxed);          std::atomic_thread_fence(std::memory_order_acquire);         if (task nullptr)         {             std::lock_guardstd::m_mutex lock(m_mutex);             task m_taskQ.load(std::memory_order_relaxed);              if (task nullptr)             {                 task new CSingletonImpl;                 std::atomic_thread_fence(std::memory_order_release);                 m_taskQ.store(task, std::memory_order_relaxed);             }         }         return task;     } private:     CSingletonImpl(){};     ~CSingletonImpl(){};     CSingletonImpl(const CSingletonImpl the);     CSingletonImpl operator(const CSingletonImpl other); private:     static std::mutex m_mutex;     static std::atomicCSingletonImpl* m_taskQ; }; std::mutex CSingletonImpl::m_mutex; std::atomicCSingletonImpl* CSingletonImpl::m_taskQ; 2、饿汉模式 1示例代码 class CSingletonImpl { public:     static CSingletonImpl* GetInstance()     {         return m_pInstance;     } private:     CSingletonImpl(){};     ~CSingletonImpl(){};     CSingletonImpl(const CSingletonImpl the);     CSingletonImpl operator(const CSingletonImpl other); private:     static CSingletonImpl* m_pInstance; }; CSingletonImpl*CSingletonImpl::m_pInstance new CSingletonImpl(); 2说明 此类模式可称为饿汉式--------程序一执行不管是否调用了GetInstance()成员函数这个单例类对象就已经被创建了。在饿汉式单例类代码的实现必须要注意如果一个项目中有多个.cpp源文件而且这些源文件中包含对全局变量的初始化代码例如某个.cpp中可能存在如下代码 int g_test  CSingletonImpl::GetInstance()-m_i; //m_i是int类型变量 那么这样的代码是不安全的因为多个源文件中全局变量的初始化顺序是不确定的很可能造成GetInstance()函数返回是nullptr,此时去访问m_i成员变量肯定会导致程序执行异常。所以对饿汉式单例类对象的使用应该在程序入口函数开始执行后例如main函数后。 注意函数第一次执行时被初始化的静态变量与通过编译器常量进行初始化的基本类型静态变量这两种情况不要再单例类的析构函数中引用其他单例类对象。
http://www.tj-hxxt.cn/news/231373.html

相关文章:

  • 企业网站主页设计工作态度和责任心句子
  • 网站整合建设是啥意思网站建设十
  • 网站建设 金手指排名霸屏wordpress 购买会员
  • 重庆网站seo什么意思iis怎么做网站
  • 网站建设 开办费太仓seo网站优化软件
  • 网站制作好以后怎么管理网站建设要做ui和什么
  • 建设部网站取消园林资质用自己网站做邮箱域名解析
  • 网站验证码插件网站建设推荐郑国华
  • 佛山网站制作好处做地方行业门户网站需要什么资格
  • 外贸联系网站商标注册在哪个部门申请
  • 我的世界服务器网站怎么做上海做网站的多吗
  • 自建网站服务器降龙网络专业做网站
  • 网站建设+太原那个公司建设网站
  • wordpress不显示categoryseo优化工程师
  • 什么网站立刻买东西厦门城乡住房建设厅网站首页
  • 福州网站排名优化免费推广网站软件
  • 广州seo顾问最好用的系统优化软件
  • jsp网站建设论文上海红蚂蚁装潢设计有限公司
  • 哪些网站可以做画赚钱作品集制作网站
  • 做网站需要电脑吗天津市哪里有做网站的
  • 网站多大够用网站开发培训网站
  • 360神搜网站建设百度竞价产品
  • wordpress 建站群网页设计公司业绩介绍
  • 中国菲律宾世预赛直播邢台网站关键词优化
  • wordpress影视主题模板免费下载seo外包顾问
  • 做外贸 网站没有邮箱怎么找在线销售管理系统
  • 织梦做的网站怎么传到网上wordpress 团队 主题
  • 怎么做网站旅游宣传生鲜网站建设的总体目标
  • 建立企业网站收费标准led灯具网站模板
  • 做企业网站需要的人seo研究所