【lesson59】线程池问题解答和读者写者问题

这篇具有很好参考价值的文章主要介绍了【lesson59】线程池问题解答和读者写者问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

线程池问题解答

什么是单例模式

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

什么是设计模式

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

单例模式的特点

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

饿汉和懒汉模式的理解

吃完饭立刻洗碗, 这种就是饿汉方式.因为下一顿吃的时候可以立刻拿着碗就能吃饭.
吃完饭, 先把碗放下, 然后下一顿饭用到这个碗了再洗碗, 就是懒汉方式
懒汉方式最核心的思想是 “延时加载”. 从而能够优化服务器的启动速度.
有兴趣的可以去我C++专栏看一看设计模式。

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

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

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

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

其他常见的各种锁

悲观锁:在每次取数据时,总是担心数据会被其他线程修改,所以会在取数据前先加锁(读锁,写锁,行锁等),当其他线程想要访问数据时,被阻塞挂起。

乐观锁:每次取数据时候,总是乐观的认为数据不会被其他线程修改,因此不上锁。但是在更新数据前,会判断其他数据在更新前有没有对数据进行修改。主要采用两种方式:版本号机制和CAS操作。

CAS操作:当需要更新数据时,判断当前内存值和之前取得的值是否相等。如果相等则用新值更新。若不等则失败,失败则重试,一般是一个自旋的过程,即不断重试。

自旋锁,公平锁,非公平锁?
自旋锁:本质就是通过不断检测锁状态来进行资源是否就绪的方案。

读者写者问题

读者和写者-----互斥、同步
写者和写者------互斥、竞争
读者和读者-------共享

读者和写者其实也是一种生产者消费者模型,只不过读者写者问题中读者的优先级高于写者,只要有一个读者在,写者就不能写,因为容易因为时序问题导致读取会错意。同样的如果写者在读者就不能去读,得等写者写完,读者才能去读。

读者写者问题应用场景:数据被读取的频率非常高,而被修改的频率特别低。

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

【lesson59】线程池问题解答和读者写者问题,linux,Linux,线程互斥,C++,读者写者文章来源地址https://www.toymoban.com/news/detail-833952.html

到了这里,关于【lesson59】线程池问题解答和读者写者问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 阿里云Alibaba Cloud Linux镜像系统介绍_常见问题解答FAQ

    阿里云服务器操作系统Alibaba Cloud Linux镜像怎么样?可以代替CentOS吗?Alibaba Cloud Linux兼容性如何?有人维护吗?漏洞可以修复吗?Alibaba Cloud Linux完全兼容CentOS,并由阿里云官方免费提供长期维护。 目录 Alibaba Cloud Linux镜像系统 Alibaba Cloud Linux性能怎么样? Alibaba Cloud Linux兼容性

    2024年02月13日
    浏览(50)
  • 【操作系统-进程】PV操作——读者写者问题

    读者写者问题,其本质就是连续多个同类进程访问同一个临界资源的问题。 第一个进程开始访问临界资源前,需要对资源加上互斥锁,后面的进程再访问时就不用再对资源加互斥锁了,直到最后一个进程访问完后,发现自己是最后一个进程,就解锁互斥锁。这就像一种情况:

    2024年01月16日
    浏览(52)
  • 用信号量机制解决读者-写者问题C语言实现

    文章目录 介绍 一、什么是进程同步,进程互斥 二、读者-写者问题概述 1.概念图 2.实例代码 总结 通过实验模拟读者和写者之间的关系,了解并掌握他们之间的关系及其原理。由此增加对进程同步的问题的了解。具体如下:   1)掌握基本的同步互斥算法,理解读者和写者模型

    2024年02月02日
    浏览(41)
  • 【ChatGpt】ChatGpt解答了 “我一下午都没解决的“ Linux触摸屏驱动的问题

    现实问题: 有一个基于Linux4.19内核开发了,在海思SS528芯片运行的系统,用鼠标可以正常使用。 现在要求使用一块公司开发的 多点触控屏 连接这个系统,能正常使用。 分析问题: 要在LInux系统使用触控屏,可能需要移植 tslib 的库,这个有以前做过,可以自己解决。 移植后

    2024年02月07日
    浏览(42)
  • 中移(苏州)软件技术有限公司面试问题与解答(2)—— Linux内核内存初始化的完整流程1

    接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(1)—— 可信计算国密标准 本文参考以下文章: 启动期间的内存管理之初始化过程概述----Linux内存管理(九) Linux初始化 特此致谢! 本文对于中移(苏州)软件技术有限公司面试问题中的“(8)Linux内核内存初

    2024年01月23日
    浏览(45)
  • C++实现经典同步问题(生产者消费者、读者写者、哲学家进餐、吸烟者问题)

    环境:windows 问题描述: 一组生产者进程和一组消费者进程共享一个初始为空、大小为〃的缓冲区,只有缓冲区没满时,生产者才能把消息放入缓冲区,否则必须等待;只有缓冲区不空时,消费者才能从中取出消息,否则必须等待。由于缓冲区是临界资源,它只允许一个生产

    2023年04月23日
    浏览(36)
  • 详解经典进程同步问题(生产者消费者问题/哲学家进餐问题/读者写者问题)_OS

    目录 1. 利用信号量实现进程的同步和互斥 利用信号量实现进程互斥 利用信号量实现进程同步 2. 生产者消费者问题 3. 哲学家就餐问题 4. 读者写者问题 读者优先 写者优先 读者写者问题的变形 使用信号量解决读者写者问题 5. 经典同步问题例题 6. 管程机制 使用管程解决生产者

    2023年04月10日
    浏览(42)
  • unity中级面试问题解答

    解释Unity3D的工作流程是什么? Unity3D的工作流程分为以下几个步骤: 导入资源 :将模型、纹理、音频等资产导入到项目中。 场景设计 :在场景中放置对象、调整摄像机和灯光等。 编写脚本 :使用C#或UnityScript编写游戏逻辑脚本。 构建和部署 :将游戏构建为可运行的应用程

    2024年01月16日
    浏览(33)
  • Internet Explorer (IE) 模式疑难解答和常见问题解答

     备注 11 Internet Explorer 11 桌面应用程序将于 2022 年 6 月 15 日停用并停用支持。 To see the list of what\\\'s in scope, see the Internet Explorer desktop app retirement FAQ. 现在使用的 IE11 应用和网站可以在 Microsoft Edge 的 Internet Explorer 模式下打开。 若要了解更多信息,请参阅 Internet Explorer on Wi

    2024年02月06日
    浏览(73)
  • 【问题解答】用数组模拟单链表

    我这里是根据我所遇到和参考大家的问题解答所总结的: 非常推荐大家打卡 y总的算法基础课 : 活动 - AcWing 这里的问题也是基于他讲的单链表所总结的。 题目: 实现一个单链表,链表初始为空,支持三种操作: (1) 向链表头插入一个数; (2) 删除第k个插入的数后面的数;

    2024年01月24日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包