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

南通网站备案WordPress询盘

南通网站备案,WordPress询盘,济南教育平台网站建设,长春关键词优化公司1 线程安全的单例模式 1.1 什么是单例模式 单例模式是一种 "经典的, 常用的, 常考的" 设计模式. 1.2 什么是设计模式 IT行业这么火, 涌入的人很多. 俗话说林子大了啥鸟都有. 大佬和菜鸡们两极分化的越来越严重. 为了让菜鸡们不太拖大佬的后腿, 于是大佬们针对一些…

1 线程安全的单例模式

1.1 什么是单例模式

单例模式是一种 "经典的, 常用的, 常考的" 设计模式.

1.2 什么是设计模式

IT行业这么火, 涌入的人很多. 俗话说林子大了啥鸟都有. 大佬和菜鸡们两极分化的越来越严重. 为了让菜鸡们不太拖大佬的后腿, 于是大佬们针对一些经典的常见的场景, 给定了一些对应的解决方案, 这个就是 设计模式

1.3 单例模式的特点

某些类, 只应该具有一个对象(实例), 就称之为单例.
例如一个男人只能有一个媳妇.
在很多服务器开发场景中, 经常需要让服务器加载很多的数据 (上百G) 到内存中. 此时往往要用一个单例的类来管理这些数据.

1.4 饿汉实现方式和懒汉实现方式

1.5 饿汉方式实现单例模式

template <typename T>
class Singleton {static T data;
public:static T* GetInstance() {return &data;}
};

只要通过 Singleton 这个包装类来使用 T 对象, 则一个进程中只有一个 T 对象的实例.

1.6 懒汉方式实现单例模式

template <typename T>
class Singleton {static T* inst;
public:static T* GetInstance() {if (inst == NULL) {inst = new T();}return inst;}
};

存在一个严重的问题, 线程不安全.
第一次调用 GetInstance 的时候, 如果两个线程同时调用, 可能会创建出两份 T 对象的实例.

但是后续再次调用, 就没有问题了.

1.7 懒汉方式实现单例模式(线程安全版本)

// 懒汉模式, 线程安全
template <typename T>
class Singleton {volatile static T* inst; // 需要设置 volatile 关键字, 否则可能被编译器优化.static std::mutex lock;
public:static T* GetInstance() {if (inst == NULL) { // 双重判定空指针, 降低锁冲突的概率, 提高性能.lock.lock(); // 使用互斥锁, 保证多线程情况下也只调用一次 new.if (inst == NULL) {inst = new T();}lock.unlock();}return inst;}
};

注意事项:

  1. 加锁解锁的位置
  2. 双重 if 判定, 避免不必要的锁竞争
  3. volatile关键字防止过度优化

2 STL,智能指针和线程安全

STL中的容器是否是线程安全的?

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

智能指针是否是线程安全的?

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

3 其他常见的各种锁

  • 悲观锁:在每次取数据时,总是担心数据会被其他线程修改,所以会在取数据前先加锁(读锁,写锁,行锁等),当其他线程想要访问数据时,被阻塞挂起。
  • 乐观锁:每次取数据时候,总是乐观的认为数据不会被其他线程修改,因此不上锁。但是在更新数据前,会判断他数据在更新前有没有对数据进其行修改。主要采用两种方式:版本号机制和CAS操作。
  • CAS操作:当需要更新数据时,判断当前内存值和之前取得的值是否相等。如果相等则用新值更新。若不等则失败,失败则重试,一般是一个自旋的过程,即不断重试。
  • 自旋锁,公平锁,非公平锁?

4 读者和写者问题

在编写多线程的时候,有一种情况是十分常见的。那就是,有些公共数据修改的机会比较少。相比较改写,它们读的机会反而高的多。通常而言,在读的过程中,往往伴随着查找的操作,中间耗时很长。给这种代码段加锁,会极大地降低我们程序的效率。那么有没有一种方法,可以专门处理这种多读少写的情况呢? 有,那就是读写锁。 

注意:写独占,读共享,读锁优先级高 

读写锁接口

 

 

 

 分析

 

 

http://www.yayakq.cn/news/903363/

相关文章:

  • 策划公司网站建设专题类网站
  • 烟台酒店网站建设广西网站建设价格多少
  • 网站制作网免费网站建设分期收费
  • 网站建设列表做任务能赚钱的网站
  • 指纹定制网站加盟网站有哪些
  • 网站开发使用的软件wordpress 收购
  • 利用虚拟主机建设企业网站实验报告做gif表情包网站
  • 烟台网站建设yt做视频的网站带模板
  • 正在建设中的网站wordpress签到插件
  • 学电商比较好的网站有哪些网站设计与开发怎么做
  • 网站建设与开发专业w3c网站开发
  • 自己的网站到期域名如何续费网站建设中出现的错误代码
  • 建设网站需要准备什么手续郑州冬青街 网站建设
  • 手机网站前端设计服务器做jsp网站教程
  • wordpress程序网站策划书模板范文
  • 自适应网站建设价格中铁十二局集团有限公司
  • 海淘一号 网站 怎么做的科技公司经营范围包括哪些
  • 做软件的网站php网站icp备案 技术负责人
  • 广东省建设厅网站推广的含义
  • 外贸仿牌网站建设大学网站建设课程课综
  • 网站设计哪家稳定wordpress文章封面
  • 用cms创建自己带数据库的网站和在本机搭建网站运行平台的心得体会制作一个网站怎么做的
  • 企业网站源码vue音乐网站开发文档撰写模板
  • 有特色的网站设计公司网站建立的建议
  • 一站式做网站系统河南网站seo地址
  • 网站建设时间查询宿州网站建设设计公司
  • 上传软件的网站wordpress手机登录设置方法
  • 卡片式设计的网站怎么制作网页步骤
  • 做博客网站要怎么配置的服店铺装修公司怎么找
  • 做网站也是一门技术全国通网站建设