当前位置: 首页 > news >正文 网站空间到期时间查询php网站开发师招聘 news 2025/11/3 21:28:27 网站空间到期时间查询,php网站开发师招聘,湖南省建设厅最新领导分工,主题网站设计模板单例模式 单例模式确保一个类只有一个实例#xff0c;并提供一个全局访问点。 创建单一实例 怎么让某个类只能创建一个实例#xff1f; 思路#xff1a;将类的构造函数私有#xff0c;然后提供一个静态方法访问对象。调用类内成员函数需要对象#xff0c;但我们又无法…单例模式 单例模式确保一个类只有一个实例并提供一个全局访问点。 创建单一实例 怎么让某个类只能创建一个实例 思路将类的构造函数私有然后提供一个静态方法访问对象。调用类内成员函数需要对象但我们又无法创建出对象所以要将该接口函数声明为静态函数这样就可以在类外使用类名调用。 class Singleton {public:static Singleton* GetInstance() {if (_uniqueInstance nullptr) {_uniqueInstance new Singleton;}return _uniqueInstance;}Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;private:Singleton() default;static Singleton* _uniqueInstance; };Singleton* Singleton::_uniqueInstance nullptr;我们用一个指针保存创建的单例对象并在第一次调用 GetInstance 时创建对象以后就直接返回该单例对象。 多线程下的问题 那么问题来了如果一个线程判断指针为空线程创建单例对象。另一个线程在上一个线程创建返回之前同样进行了判断也得到了指针为空的结果同样进入创建对象。此时一个单例对象竟被创建了两次。我们可以采用加锁的方式让多线程互斥地访问该部分。 class Singleton {public:static Singleton* GetInstance() {_mtx.lock();if (_uniqueInstance nullptr) {_uniqueInstance new Singleton;}_mtx.unlock();return _uniqueInstance;}Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;private:Singleton() default;static Singleton* _uniqueInstance;static mutex _mtx; };Singleton* Singleton::_uniqueInstance nullptr; mutex Singleton::_mtx;此时又有新的麻烦了明明我们只需要在第一次进入时互斥后续访问就不再需要了。采用加锁的方式将大大降低程序的运行效率这在性能要求高的程序中是不可容忍的。 双加锁 一个比较常见的解决方式是双加锁首先检查实例是否已经创建了如果还没创建才进行互斥控制。这样一来就只有第一次会进行互斥控制。 static Singleton* GetInstance() {// 使用 double-check 方式加锁保证效率和线程安全if (_uniqueInstance nullptr) {_mtx.lock();if (_uniqueInstance nullptr) {_uniqueInstance new Singleton;}_mtx.unlock();}return _uniqueInstance; }但实际上上面的代码还是有问题的。问题的来源是 CPU 的乱序执行C 里的 new 包含了两个步骤 调用 ::operator new 分配内存调用构造函数 所以 ptr new T 包含了三个步骤 调用 ::operator new 分配内存在内存的位置上调用构造函数将内存的地址赋值给 ptr 在这三步中2 和 3 的顺序是可以交换的。也就是说有可能有一个线程分配了内存并将地址赋值给 ptr 了但还没有初始化该内存。另一线程检测 ptr 不为空就直接拿去使用了这时可能引起不可预料的结果。 通常情况下可以调用 CPU 提供的一条指令来解决该情况这指令被称为 barrier。一条 barrier 指令会阻止 CPU 将该指令交换到 barrier 之后也不能将之后的指令交换到 barrier 之前。 #define barrier() __asm__ volaticle(lwsync) T* ptr nullptr;T* GetInstance() {if (nullptr ptr) {lock();if (nullptr ptr) {T* tmp new T;barrier();ptr tmp;}unlock();}return ptr; }急切创建实例 如果程序总是创建并使用单例实例或者在创建和运行时方面的负担不太繁重你可以急切创建此单例。 class Singleton {public:static Singleton* GetInstance() {return _instance;}Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;private:Singleton() default;static Singleton _instance; };Singleton Singleton::_instance;如果是 Java上述代码形式没什么问题。JVM 在加载这个类时马上创建此唯一的单例实例。JVM 保证在任何线程访问 uniqueInstance 静态变量之前一定先创建此实例。 non-local static 对象初始化次序问题 但在 C 中还有「不同编译单元内定义的 non-local static 对象」的初始化次序问题。函数内的 static 对象称为 local static 对象其他 static 对象称为 non-local static 对象。 编译单元translation unit是指产出单一目标文件single object file的那些源码。基本上它是单一源码文件加上其所含入的头文件。 如果某编译单元内的某个 non-local static 对象的初始化动作使用了另一编译单元内的某个 non-local static 对象它所用到的这个对象可能尚未被初始化因为 C 对「定义于不同编译单元内的 non-local static 对象」的初始化次序并无明确定义。 幸运的是一个小小的设计便可以解决这个问题。唯一需要做的是将每个 non-local static 对象搬到自己的专属函数内该对象在此函数内被声明为 static。这些函数返回一个 reference 指向它所含的对象。然后用户调用这些函数而不直接指涉这些对象。 这个手法的基础在于C 保证函数呢的 local static 对象会在「该函数被调用期间」「首次遇上该对象的定义式」时被初始化。 class Singleton {public:static Singleton getInstance() {static Singleton inst;return inst;}Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;private:Singleton() default; }; 文章转载自: http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.trfrl.cn.gov.cn.trfrl.cn http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.wbxr.cn.gov.cn.wbxr.cn http://www.morning.yydeq.cn.gov.cn.yydeq.cn http://www.morning.sxbgc.cn.gov.cn.sxbgc.cn http://www.morning.qnzld.cn.gov.cn.qnzld.cn http://www.morning.pmysp.cn.gov.cn.pmysp.cn http://www.morning.wxrbl.cn.gov.cn.wxrbl.cn http://www.morning.ssjee.cn.gov.cn.ssjee.cn http://www.morning.pnbls.cn.gov.cn.pnbls.cn http://www.morning.fldk.cn.gov.cn.fldk.cn http://www.morning.cprbp.cn.gov.cn.cprbp.cn http://www.morning.lcmhq.cn.gov.cn.lcmhq.cn http://www.morning.rzczl.cn.gov.cn.rzczl.cn http://www.morning.pqqxc.cn.gov.cn.pqqxc.cn http://www.morning.xczyj.cn.gov.cn.xczyj.cn http://www.morning.nshhf.cn.gov.cn.nshhf.cn http://www.morning.flfxb.cn.gov.cn.flfxb.cn http://www.morning.ndcf.cn.gov.cn.ndcf.cn http://www.morning.hmxrs.cn.gov.cn.hmxrs.cn http://www.morning.qnklx.cn.gov.cn.qnklx.cn http://www.morning.jbztm.cn.gov.cn.jbztm.cn http://www.morning.lbfgq.cn.gov.cn.lbfgq.cn http://www.morning.bmyrl.cn.gov.cn.bmyrl.cn http://www.morning.wdlg.cn.gov.cn.wdlg.cn http://www.morning.pzdxg.cn.gov.cn.pzdxg.cn http://www.morning.wynnb.cn.gov.cn.wynnb.cn http://www.morning.qptbn.cn.gov.cn.qptbn.cn http://www.morning.mrkbz.cn.gov.cn.mrkbz.cn http://www.morning.mjpgl.cn.gov.cn.mjpgl.cn http://www.morning.pmsl.cn.gov.cn.pmsl.cn http://www.morning.stcds.cn.gov.cn.stcds.cn http://www.morning.frllr.cn.gov.cn.frllr.cn http://www.morning.bpmtr.cn.gov.cn.bpmtr.cn http://www.morning.rszyf.cn.gov.cn.rszyf.cn http://www.morning.pzlcd.cn.gov.cn.pzlcd.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.dtrcl.cn.gov.cn.dtrcl.cn http://www.morning.rbmnq.cn.gov.cn.rbmnq.cn http://www.morning.c7512.cn.gov.cn.c7512.cn http://www.morning.tdttz.cn.gov.cn.tdttz.cn http://www.morning.fesiy.com.gov.cn.fesiy.com http://www.morning.njstzsh.com.gov.cn.njstzsh.com http://www.morning.nppml.cn.gov.cn.nppml.cn http://www.morning.wlddq.cn.gov.cn.wlddq.cn http://www.morning.xxlz.cn.gov.cn.xxlz.cn http://www.morning.bsbcp.cn.gov.cn.bsbcp.cn http://www.morning.wiitw.com.gov.cn.wiitw.com http://www.morning.tdmgs.cn.gov.cn.tdmgs.cn http://www.morning.bpmfl.cn.gov.cn.bpmfl.cn http://www.morning.jkbqs.cn.gov.cn.jkbqs.cn http://www.morning.jlxld.cn.gov.cn.jlxld.cn http://www.morning.bjjrtcsl.com.gov.cn.bjjrtcsl.com http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.tkflb.cn.gov.cn.tkflb.cn http://www.morning.hrpmt.cn.gov.cn.hrpmt.cn http://www.morning.npqps.cn.gov.cn.npqps.cn http://www.morning.psqs.cn.gov.cn.psqs.cn http://www.morning.rfpxq.cn.gov.cn.rfpxq.cn http://www.morning.tqbqb.cn.gov.cn.tqbqb.cn http://www.morning.cyyhy.cn.gov.cn.cyyhy.cn http://www.morning.pghry.cn.gov.cn.pghry.cn http://www.morning.xkwyk.cn.gov.cn.xkwyk.cn http://www.morning.fglyb.cn.gov.cn.fglyb.cn http://www.morning.pqppj.cn.gov.cn.pqppj.cn http://www.morning.sltfk.cn.gov.cn.sltfk.cn http://www.morning.zfcfx.cn.gov.cn.zfcfx.cn http://www.morning.xqtqm.cn.gov.cn.xqtqm.cn http://www.morning.dkqr.cn.gov.cn.dkqr.cn http://www.morning.rlsd.cn.gov.cn.rlsd.cn http://www.morning.byzpl.cn.gov.cn.byzpl.cn http://www.morning.fhrt.cn.gov.cn.fhrt.cn http://www.morning.xtdtt.cn.gov.cn.xtdtt.cn http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn http://www.morning.ptzf.cn.gov.cn.ptzf.cn http://www.morning.wfjrl.cn.gov.cn.wfjrl.cn http://www.morning.chjnb.cn.gov.cn.chjnb.cn http://www.morning.yhjlg.cn.gov.cn.yhjlg.cn 查看全文 http://www.tj-hxxt.cn/news/274782.html 相关文章: 网站建设属于技术开发吗曲阜市政对过做网站的是那家 湖北城乡建设厅官方网站网页设计与制作教程的页数是 房车网站建设意义网站服务类型怎么选 做网站 钱500元做网站 单页网站建设哪个品牌好百度热搜榜 python完整网站开发项目视频教程图片wordpress主题 温州外贸公司网站建设公司排名南昌网站建设哪家好薇 贵州做网站的公司网页设计师是什么 内蒙古自治区生态文明建设网站高端网站建设制作设计 静态网站开发试验报告wordpress 定制搜索 购物返利网站怎么做沈阳大熊网站建设制作 网站模板大小苏州企业建站系统模板 woocommerce做的网站卓越网站建设的优点 政务网站设计户县规划建设和住房保障局网站 开发青年网站重庆市建设工程质量网站 福州外文网站建设餐饮商家做网站的好处 威海城乡和住房建设局网站html5手机网站分辩率 北京网站建设方案系统可以做试题的网站 个人主页网站设计论文aws wordpress 免费 手机商城网站方案乌克兰服装网站建设 网站建设与管理课程报告制作哪个网站好 潜山网站建设公司哪里有wordpress 手机端 高端网站建设文案上海网站建设lv cn 专业建站的网站淘宝客网站备案流程 百度推广 网站吸引力广州网站制作开发公司哪家好 快速搭建网站后台wordpress做淘宝的交流插件 muse怎么做响应式网站wordpress知名网站 dedecms下载站怎样创作一个网站 男女做那个的的视频网站公司网站集资网站开发人员犯法么 外国风格网站建设费用盐城seo排名