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

巴中做网站 微信开发百度电话怎么转人工

巴中做网站 微信开发,百度电话怎么转人工,珠海市网站开发公司电话,抖音开放平台游戏提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、单例是什么?二、解读1.懒汉式2.饿汉式3.static变量特性4.call_once特性 总结 前言 单例模式几乎是每种语言都不可少的一种设计模式&#xff0c…

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、单例是什么?
  • 二、解读
    • 1.懒汉式
    • 2.饿汉式
    • 3.static变量特性
    • 4.call_once特性
  • 总结


前言

单例模式几乎是每种语言都不可少的一种设计模式,今天就针对C++语言来解读下集中单例模式,并给出代码说明。


一、单例是什么?

单例就是单实例,简而言之内存中只存在这一个实例,在很多场景下很有用,比如线程池内存池等等。

二、解读

按照创建时机可以分为饿汉式懒汉式。所谓饿汉式就是程序启动的时候立即创建,饿汉式就是需要的时候创建。

1.懒汉式

懒汉式顾名思义,不会主动创建,直到主动获取才创建。懒汉式又主要分为两种,线程安全线程不安全。接下来分别介绍这几种和提供源代码示例。

简单模式:

class Singleton {static Singleton *getInstance() {if (instance == nullptr) {instance = new Singleton();}return instance;}private:static Singleton *instance;};Singleton *Singleton::instance = nullptr;

优点:性能和饿汉式差不多,没有锁,性能不会损失
缺点:线程不安全
总结:需要自己确保线程安全,比如启动线程前就要创建好,避免竞争条件产生

线程安全:

#include <mutex>
class Singleton {public:static Singleton *getInstance() {std::lock_guard<std::mutex> lock(mtx);if (instance == nullptr) {instance = new Singleton();}return instance;}private:static Singleton *instance;static std::mutex mtx;};Singleton *Singleton::instance = nullptr;std::mutex Singleton::mtx;

优点:线程安全,随时随地都是安全的
缺点:性能差,每次获取实例都要上锁
总结:不建议使用

双重检查锁:

#include <mutex>
class Singleton {public:static Singleton *getInstance() {if (instance == nullptr) {std::lock_guard<std::mutex> lock(mtx);if (instance == nullptr) {instance = new Singleton();}}return instance;}private:static Singleton *instance;static std::mutex mtx;};Singleton *Singleton::instance = nullptr;std::mutex Singleton::mtx;

优点:线程安全,性能比上面的强
缺点:性能有轻微损耗,只有第一次创建才需要上锁,后面访问不需要上锁
总结:强烈推荐,既解决了线程安全问题,又解决了性能问题

2.饿汉式

不会产生数据竞争,程序启动时就创建和,在竞争条件出现之前创建完成,所以先天是线程安全的。

class Singleton {public:static Singleton &getInstance() {return instance;}private:static Singleton instance;};Singleton Singleton::instance;

优点:线程安全,性能最好
缺点:无论需不需要都会创建,会浪费资源
总结:可用但不太推荐

3.static变量特性

C++11之后static修饰的局部变量有一个很重要的特性:初始化的时候会自动加锁,这个特性是编译器负责维护的。所以可以借用这个特性开发一个单例模式,一定是线程安全的,而且提供不俗的性能

注:这个单例又叫米尔斯单例(Meyers' Singleton)

class Singleton {public:static Singleton &getInstance() {static Singleton instance;return instance;}private:Singleton() {}public:Singleton(const Singleton &) = delete;Singleton &operator=(const Singleton &) = delete;};

优点:线程安全,性能不俗
缺点:初始化上锁略微拖慢性能,后面正常获取,C++11以后版本才行
总结:极其推荐

4.call_once特性

除了米尔斯单例,还有一个C++11的新特性可以设计单例,这个特性我们平常容易忽视,那就是call_once。它也是一种线程同步机制,C++保证call_once保护的方法只被调用一次

#include <atomic>
class Singleton {public:static Singleton& getInstance(){std::call_once(flag,[]{instance = new Singleton();});return *instance;}private:static Singleton* instance;static std::once_flag flag;};Singleton* Singleton::instance = nullptr;std::once_flag Singleton::flag;

优点:线程安全,性能不俗,针对方法可以同时初始化多个资源
缺点:第一次调用拖慢性能,后面就不会了,C++11以后版本才行
总结:和米尔斯很像,但是实现比米尔斯复杂,推荐指数放在米尔斯单例之后


总结

1、C++11以上版本优先使用米尔斯单例,比双重检查锁性能强
2、其他场景建议双重检查锁,call_once酌情使用

http://www.zhongyajixie.com/news/22568.html

相关文章:

  • 网站滚动图片代码网络营销有哪些特点
  • 手机收藏网站代码宁波seo推广如何收费
  • 南宁网站建设培训班推广app赚钱项目
  • 儿童摄影网站源码国家免费培训机构
  • 公司网站代做关键词搜索指数查询工具
  • 修改wordpress中的 功能 小工具网站编辑seo
  • 东莞定制网站开发什么是白帽seo
  • 厦门网站建设开发福州百度网站快速优化
  • flarum整合wordpress厦门专业做优化的公司
  • 这几年做那个网站致富线上营销手段有哪些
  • seo怎么做自己的网站百度平台客服怎么联系
  • 网站设计建设公司网络营销师有前途吗
  • 深圳做网站佰达科技三十如何免费发布广告
  • 怎么做军事小视频网站成都网络营销公司
  • 深圳龙华鸿宇大厦网站建设网络营销应用方式
  • 视频网站不赚钱为什么还做淘宝运营团队怎么找
  • 做水果为主的b2c网站有哪些哪个平台可以免费推广
  • 南通网站推广公司seo学习
  • wordpress开启redis西安网络优化哪家好
  • 上海企业免费网站建设百度推广登陆平台
  • 百度网盟如何选择网站网站营销推广
  • 青岛建设集团股份有限公司广州seo关键词
  • 楼凤网站怎么做的韩国今日特大新闻
  • wordpress 党建 主题沈阳百度seo排名优化软件
  • 长沙 直播网站建设短视频seo营销
  • 个人soho要怎么做企业网站提交网址给百度
  • 工装公司名字怎么起培训机构seo
  • 在线旅游网站建设方案北京seo推广外包
  • 政府网站建设会议纪要百度竞价是seo还是sem
  • 博客网站模板二十个优化