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

北京哪些做网站的公司好wordpress汉化客户端

北京哪些做网站的公司好,wordpress汉化客户端,wordpress创建文章分类,唐山建站方案文章目录 一、单例模式的特点二、饿汉模式实现单例三、懒汉模式实现单例四、STL线程安全吗?五、智能指针线程安全吗? 一、单例模式的特点 一个类,只应该实例化了一个对象,就是单例。 二、饿汉模式实现单例 举个饿汉模式的例子&…

文章目录

  • 一、单例模式的特点
  • 二、饿汉模式实现单例
  • 三、懒汉模式实现单例
  • 四、STL线程安全吗?
  • 五、智能指针线程安全吗?


一、单例模式的特点

一个类,只应该实例化了一个对象,就是单例。

二、饿汉模式实现单例

举个饿汉模式的例子:洗碗,一个人吃碗饭之后,他马上洗碗,下次吃饭的时候就可以直接拿起碗吃饭了。这就是饿汉模式。
懒汉模式是:一个人吃完饭之后,他先不洗碗,下次吃饭的时候再洗碗,这就是懒汉模式。
懒汉模式的核心特点是:延迟加载。

饿汉模式实现单例:
template<class T>
class Singleton
{
private:static T inst;public:static T* GetInstance(){return &inst;}
};

通过SingleTon类实例化的对象只能拥有一个。

三、懒汉模式实现单例

懒汉模式具体是什么已经介绍过了。
下面用代码实现懒汉模式

懒汉模式实现单例
template<class T>
class Singleton
{
private:static T* inst;public:static T* GetInstance(){if(inst == nullptr)inst  = new T();return inst;}
};

但是这样的懒汉模式存在线程安全,假如有两个线程同时进入GetInstance函数中new T()呢?
这样就会存在两个inst指针指向的对象了, 就不再是单例了。

所以需要加锁保证线程安全。
下面是线程安全版本的单例模式

template <class T>
class Singleton
{
private:static std::mutex lock;volatile static T* inst;  //设置volatile关键字的目的是防止被编译器优化
public:static T* GetInstance(){lock.lock();if(inst == nullptr)		//判断的本质也是再访问临界资源,所以要在加锁之后inst = new T();lock.unlock();return inst;}

这样解决了线程并发问题,但是这样假如有大量线程同时进入该函数时,会并发竞争锁,会造成性能低下,极端情况下可能出现卡顿现象。
因为不管有没有实例化T对象,都会进行锁竞争,这是不太合理的。

正确的应该是:如果没有实例化T对象,先申请锁对T对象new一个出来。
如果有了T对象,直接返回即可。
下面是改正后的代码:

template <class T>
class Singleton
{
private:static std::mutex lock;volatile static T* inst;  //设置volatile关键字的目的是防止被编译器优化
public:static T* GetInstance(){if(inst == nullptr)   //双重判定空指针, 降低锁冲突的概率, 提高性能{lock.lock();if(inst == nullptr)   //判断的本质也是再访问临界资源,所以要在加锁之后inst = new T();lock.unlock();}return inst;}};

这样实现懒汉模式的单例模式,解决了线程安全+性能低下的问题。

四、STL线程安全吗?

不是
原因是, STL 的设计初衷是将性能挖掘到极致, 而一旦涉及到加锁保证线程安全, 会对性能造成巨大的影响.而且对于不同的容器, 加锁方式的不同, 性能可能也不同(例如hash表的锁表和锁桶).
因此 STL 默认不是线程安全. 如果需要在多线程环境下使用, 往往需要调用者自行保证线程安全

五、智能指针线程安全吗?

对于 unique_ptr, 由于只是在当前代码块范围内生效, 因此不涉及线程安全问题
对于 shared_ptr, 多个对象需要共用一个引用计数变量, 所以会存在线程安全问题.但是标准库实现的时候考虑到了这个问题, 基于原子操作(CAS)的方式保证 shared_ptr 能够高效, 原子的操作引用计数

http://www.dtcms.com/wzjs/570207.html

相关文章:

  • 芜湖灵创网站建设今科云平台网站建设技术开发
  • 中山企业网站多少钱东莞网站营销策划
  • wordpress登录网站花店网页设计模板
  • 手机设计培训网站建设做公司网站注意事项
  • 固定ip做网站温州专业网站制作设计
  • 手机网站怎么设置成电脑版的做网站站怎么赚钱吗
  • 云梦网络 网站模板东台网站开发
  • 网站建设设计公司 知乎烟台商城app开发
  • 网站的建设ppt模板网站建设知识网
  • 成都大丰五块石网站建设电商设计公司
  • 做网站遇到的问题及解决方法有专门为个人网站做推广的吗
  • wordpress播放苏州网站搜索引擎优化
  • 你认为公司在建立网站时应满足哪些目标做室内设计通常上的网站
  • seo搜索优化网站推广排名想做一个部门的网站怎么做
  • 企业网站建设的基本原则黄山旅游攻略自由行攻略
  • 做电脑网站增加网站备案
  • ppt图标网站链接怎么做有了域名公司网站怎么建设
  • 西安网站制作公司推荐昌邑做网站的公司
  • 企业网站建设课件做网站百度收录
  • 婴幼儿用品销售网站开发报告网站设计流程的步骤
  • 贵阳白云网站建设开发购物商城app需要多少钱
  • 茂名建设网站wordpress被植入广告插件
  • 高校保卫处网站建设工作总结网页设计与制作知到智慧树答案
  • 专升本可以报考哪些大学苏州整站优化
  • 网站开发目前主要用什么技术公司系统软件
  • vs做的网站怎么让局域网的看到建外贸网站哪个好
  • 餐饮网站设计做网站公司宣传语
  • 河南微网站建设公司哪家好如何设计网站中的上传功能
  • 湖北省建设厅官方网站毕德立网站地图定位怎么做
  • 公司备案查询网站浙江省交通工程建设集团网站