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

医院网站html模板模板手机网站建设公司排名

医院网站html模板,模板手机网站建设公司排名,三视觉设计网站,wordpress的根目录1. “对象性能” 模式 面向对象很好地解决了 “抽象” 的问题#xff0c; 但是必不可免地要付出一定的代价。对于通常情况来讲#xff0c;面向对象的成本大都可以忽略不计。但是某些情况#xff0c;面向对象所带来的成本必须谨慎处理。典型模式 SingletonFlyweight 2. Si…1. “对象性能” 模式 面向对象很好地解决了 “抽象” 的问题 但是必不可免地要付出一定的代价。对于通常情况来讲面向对象的成本大都可以忽略不计。但是某些情况面向对象所带来的成本必须谨慎处理。典型模式 SingletonFlyweight 2. Singleton 单件模式 2.1 动机Motivation 在软件系统中经常有这样一些特殊的类必须保证它们在系统中只存在一个实例才能确保它们的逻辑正确性以及良好的效率。如何绕过常规的构造器提供一种机制来保证一个类只有一个实例这应该是类设计者的责任而不是使用者的责任。 2.2 模式定义 保证一个类仅有一个实例并提供一个该实例的全局访问点。 ——《设计模式》GoF 2.3 实例代码 class Singleton { private:// 将构造函数、拷贝构造函数设置成 private不允许用户创建实例Singleton();Singleton(const Singleton other);public:// 提供实例的全局访问点static Singleton* getInstance();private:// static 成员唯一的实例static Singleton* m_instance; };// static 成员初始化 Singleton* Singleton::m_instance nullptr;/* 线程非安全版本多线程环境下有可能创建出多个实例 当线程A在执行完(1)、执行(2)之前线程B抢到时间片开始执行(1)这样线程A和B都可以创建出实例 所以在多线程环境中需要加锁。 */ Singleton* Singleton::getInstance() {if (m_instance nullptr) { // (1)m_instance new Singleton(); // (2)}return m_instance; }/* 线程安全版本但锁的代价过高 因为锁的粒度粗进入函数后立马加锁整个函数过程都持有锁 一般m_instance是只读的当m_instance创建完成后各线程可以直接获取该实例 该代码既有问题当线程A持有锁时线程B无法获取m_instance必须等待线程A释放锁。 */ Singleton* Singleton::getInstance() {Lock lock;if (m_instance nullptr) {m_instance new Singleton();}return m_instance; }/* 双检查锁但由于内存读写reorder不安全 reorder含义编译器可能改变对象构造的顺序 常规对象构造分为3个步骤a.分配空间b.调用构造函数完成对象初始化c.返回对象的指针但编译器有时会改变这3个顺序变成a.c.b。 这样代码就会出现问题当m_instance未初始化时线程A需要对m_instance进行实例化若当线程A完成步骤a和c而未完成b时线程B调用该函数由于此刻 m_instance ! nullptr会直接返回m_instance但该实例尚未完成初始化直接使用该实例会产生未定义行为。 (2)处的二次检查必不可少当AB两个线程都通过(1)后开始抢锁假设A抢到了锁A对m_instance进行实例化当线程A释放锁线程B获得锁后如果没有(2)处的检查线程B将再次对m_instance初始化不符合单例模式设计原则。 */ Singleton* Singleton::getInstance() { if (m_instance nullptr) { // (1)Lock lock;if (m_instance nullptr) { // (2)这里的二次检查必不可少m_instance new Singleton(); // (3)}}return m_instance; }// C 11版本之后的跨平台实现 (volatile) std::atomicSingleton* Singleton::m_instance; std::mutex Singleton::m_mutex;Singleton* Singleton::getInstance() {Singleton* tmp m_instance.load(std::memory_order_relaxed);std::atomic_thread_fence(std::memory_order_acquire); // 获取内存fenceif (tmp nullptr) {std::lock_guardstd::mutex lock(m_mutex);tmp m_instance.load(std::memory_order_relaxed);if (tmp nullptr) {tmp new Singleton;std::atomic_thread_fence(std::memory_order_release); // 释放内存fencem_instance.store(tmp, std::memory_order_relaxed);}}return tmp; }2.4 结构Structure 2.5 要点总结 Singleton 模式中的实例构造器可以设置为 protected 以允许子类派生。Singleton 模式一般不要支持拷贝构造函数和 Clone 接口因为这有可能导致多个对象实例与 Singleton 模式的初衷违背。如何实现多线程环境下安全的 Singleton 注意对双检查锁的正确实现。
http://www.hkea.cn/news/14503809/

相关文章:

  • 音乐网站设计源码查找企业信息的网站
  • 产品设计师网站创新创业项目计划书ppt
  • 高端网站制作企业客户管理系统
  • 北京燕华工程建设有限公司网站api接口开放平台
  • 网站建设规划书主题电子商务平台方案
  • 米拓做的网站如何改代码网站建设过程中应该注意的事项有
  • 网站优化月总结网站搭建设计合同
  • 宁波网站商城建设wordpress连接微博专业版
  • 织梦微信网站模板阜阳讯拓网站建设公司
  • 如何把网站做权重短视频宣传片制作
  • 深圳网址网站建设公司哈尔滨建设网站公司吗
  • 新乡营销型网站建设百度排行榜风云榜
  • 手机网站页面模板如何网站推广宣传
  • 有做医学手术视频的网站广西金兰工程建设管理有限公司网站
  • 企业网站搜索优化网络推广wordpress type参数
  • 菏泽去哪了做网站网站站点地图
  • 网站开发都需要什么工具app开发 网站建设
  • 淮安品牌网站建设天津网站制作套餐
  • 鲜花店的网站建设wordpress主题添加目录
  • 株洲网站关键词优化恩平国有建设用地使用权拍卖网站
  • 龙岩网站建设馨烨建设银行网站怎么基本转个人
  • 网站建设源代码共享建设通银行官方网站
  • 最便宜的网站建设公司wordpress 添加固定字段
  • 苏州高级网站建设wordpress ftp上传插件
  • wordpress+站群插件网站定制怎么选择
  • 格力网站的建设情况北京到安阳高铁时刻表查询
  • 娄底网站建设公司北京 网站制作
  • 自己做网站的给微信取个什么名字好企业成品网站模板
  • 网站外链购买网站挂到国外服务器地址
  • 漯河网站建设-千弘网络儿童网站开发 论文