秒懂Linux之消息队列与信号量(了解)

news2024/9/21 8:43:42

fe594ea5bf754ddbb223a54d8fb1e7bc.gif

目录

前言

消息队列原理

信号量理论

信号量原理

IPC资源


前言

消息队列与信息量目前已经不常用了,大家也可以参考共享内存去了解基本原理即可。

消息队列原理

  • 消息队列提供了一个从一个进程向另外一个进程发送一块数据的方法
  • 每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值特性方面

消息队列的创建: 

消息队列的删除:

消息队列的发送与接收: 

 

信号量理论

对于信号量我们可以这么理解:

  • 我们去电影院买票预定座位这种行为本质上就是信号量对资源的预定机制~
  • 这个资源并不是说被我持有才是我的,只要我预定了,在某一个时间点上那他就是我的~
  • 有多少票,就卖多少座位(资源),这样就能保证每一份资源都不会被并发访问~

信号量在这当中扮演的就是一个描述资源数量的计算器——int count = xx;

进程要想访问到资源就得进行以下步骤:

  • 申请信号量(买票)——预定——信号量申请成功(拿到资源) if(count>0) count-- else wait
  • 进行资源的访问
  • 释放信号量(看完电影,离开)——该资源可以别人申请——count++

这片区域称为保护临界资源的临界区~

不过需要注意一点:在多线程的场景下int是无法支撑住资源的描述的,就拿父子进程的写时拷贝就可以验证二者并无法看到同一份count,而且count不是原子性的,他会在执行期间被干扰~

所有的进程在访问临界资源时都必须要申请信号量——而前提是信号量能被所有进程看到,这意味着它本身就是共享资源。既然int count无法代表信号量(没有原子性),那么申请信号量(--)与释放信号量(++)这些操作(简称PV操作)又是如何保证原子性的?

下面我们来介绍三个函数

创建信号量:跟前面所学的共享内存一致~ nsems为创建信号量的个数

删除信号量:semnum为信号量的属性~

PV操作:nsops是对应哪一个信号量,sops为具体操作

信号量原理

用以下几点做总结:

  • 信号量就是对共享资源进行保护~
  • 用于同步(访问资源在不争抢的情况下,具有一定的顺序性。)例如食堂排队打饭~,也用于互斥(访问一部分共享资源时,任何时刻都只有我一个人。)例如直接买下整个电影院~
  • 被保护起来的,任何时刻都只允许一个进程访问的公共资源称为临界资源
  • 访问临界资源的代码称为临界区,其他的称为非临界区。所谓的保护临界资源,其实就是我们程序员去保护临界区
  • 原子性:操作对象的时候只有两种状态,要么还没开始,要么已经结束,绝不存在过程被干扰~

IPC资源

所谓的共享内存,消息队列,信号量本质上都属于IPC资源,而OS必然要对这些IPC资源作管理,如何管理?先描述,再组织~

通过强转为对应的指针就可以访问其结构所在的数据~那我们如何确定位于ipc[ ]中是哪一个IPC资源呢?

利用标记位设置进mode中自动帮我们判断~

但IPC资源后面渐渐退伍的根本原因还是在于它违背了Linux下一切皆文件的核心概念,如果ipc_id下存放的是对应的文件描述符还好,但它偏偏另搞一套体系,也造成了逐渐脱离大势的结果~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2151860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS10.2/10.6安装包下载与安装(附详细安装步骤)

相信从事地理专业的小伙伴来说,应该对今天的标题不会陌生。Arcgis是一款很常用的地理信息系统软件,主要用于地理数据的采集、管理、分析和展示。目前比较常见的版本有ArcGIS 10.2和ArcGIS 10.6。 不可否认,Arcgis具有强大的地图制作、空间分…

Linux环境Docker安装Mongodb

Linux环境Docker安装Mongodb 环境要求拉取指定版本镜像创建映射目录(相当于数据存放于容器外,容器被删除不会影响数据)启动容器 进入mongo命令行为指定db创建新用户查看mongodb的容器id进入命令行查看所有db切换db为指定db创建新用户使用新账…

5、论文阅读:深水下的图像增强

深水下的图像增强 前言介绍贡献UWCNN介绍网络架构残差Residuals块 Blocks网络层密集串联网络深度减少边界伪影网络损失Loss后处理前言 水下场景中,与波长相关的光吸收和散射会降低图像的可见度,导致对比度低和色偏失真。为了解决这个问题,我们提出了一种基于卷积神经网络的…

【JavaEE】线程创建和终止,Thread类方法,变量捕获(7000字长文)

阿华代码,不是逆风,就是我疯,你们的点赞收藏是我前进最大的动力!!7000字长文,希望本文内容能够帮助到你! 目录 一:创建线程五种方式 方式一:继承Thread类,…

服务器非法关闭后MySQL服务启动失败

在写这篇文章前,我弄好了,写完之后把成功安装的几个MySQL都删除了,只留了最后测试成功的服务“mysql-test” ,然后点击运行,发现又出现上图的错误。心态炸了。 本以为定位到问题了,但是这个错误让我迷茫了。我只能临时…

缓存技巧 · Spring Cache Caffeine 高性能缓存库

Caffeine 背景 Caffeine是一个高性能的Java缓存库,它基于Guava Cache进行了增强,提供了更加出色的缓存体验。Caffeine的主要特点包括: 高性能:Caffeine使用了Java 8最新的StampedLock乐观锁技术,极大地提高了缓存的并…

VisionPro - 基础 - 00 模板匹配技术和在VP中的使用 - PMAlign - PatMax - (3)

前言: 针对PatMax 的高级应用和原理,在这一节继续进行说明:这一节主要考虑的是PatMax模板匹配的原理: How PatMax Finds Patterns in an Image PatMax 模板匹配原理 1 Run-time Space When you search for a PatMax pattern in …

World of Warcraft [CLASSIC] International translation bug

internationalization i18n_getinternationalizationjs-CSDN博客 1)国际化翻译不完整 Chance on melee and ranged critical strike to increase your attack power by 1262 for 10s. 2)更新美酒节,服务器并发太高,被提出副本 Wo…

DataFrame生成excel后为什么多了一行数字

问题描述 python查询数据生成excel文件,生成的excel多了第一行数字索引,1,2,3,4,5...... 代码: df pd.DataFrame(data)df.to_excel(filename, sheet_name用户信息表, indexFalse) 解决: 原理也很简单,就是设置个参…

Java对象一口气讲完!φ(* ̄0 ̄)

Java Object类 Java面向对象设计 - Java Object类 Java在java.lang包中有一个Object类。 所有Java类都直接或间接扩展Object类。 所有Java类都是Object类的子类Object类是所有类的超类。 Object类本身没有超类。 Object类的引用变量可以保存任何类的对象的引用。 以下代…

python中ocr图片文字识别样例(一)

一、使用easyocr安装依赖 pip install easyocr pip install opencv-python-headless # 处理图像二、具体实现,此处有个缺陷,大家可以尝试解决下,识别的文字打印结果没问题,但是图片识别出现乱码: 2.1 具体识别的图片…

Springboot 文件上传下载相关问题

文章目录 关于Springboot 文件上传下载问题解决方案注意事项文件上传文件下载文件删除文件在线打开在写练习的时候,发现了一些小小的问题,已经在 上述代码中体现。① 代码路径碰到中文的时候,会有乱码,需要转换(内容中…

【全网首发】2024华为杯数学建模ABCDEF选题方向+完整思路代码+数据集处理+可视化结果

2024华为杯研究生数学建模比赛ABCDEF选题分析 建议选哪道题? 点击链接加入群聊【2024华为杯数学建模助攻资料】:http://qm.qq.com/cgi-bin/qm/qr?_wv1027&kxtS4vwn3gcv8oCYYyrqd0BvFc7tNfhV7&authKeyedQFZne%2BzvEfLEVg2v8FOm%2BWNg1V%2Fiv3H…

KMP算法的实现

这是C算法基础-数据结构专栏的第二十六篇文章,专栏详情请见此处。 引入 KMP算法是一种可以快速查找某一字符串在一个文本中的所有出现的算法。 下面我们就来讲KMP算法的实现。 定义 Knuth–Morris–Pratt 算法,简称KMP算法,是由Knuth、Pratt…

2024华为杯数学建模竞赛E题

2024年中国研究生数学建模竞赛E题 高速公路应急车道紧急启用模型 高速公路拥堵现象的原因众多,除了交通事故外,最典型的就是部分路段出现瓶颈现象,主要原因是车辆汇聚,而拥堵后又容易蔓延。高速公路一些特定的路段容易形成堵点&…

云手机的便捷性和安全性体现在哪?

随着5G技术的迅速发展,云手机在游戏、电商以及新媒体营销等领域中的应用日益广泛。它不仅能够显著降低成本、提升效率,还随着边缘计算和云技术的进步,展现出无限的增长潜力。 云手机的便捷性体现在哪里? 云手机的便捷性毋庸置疑。…

煤矿智慧矿井数据集 (1.煤矿采掘工作面智能分析数据集2.煤矿井下钻场智能分析数据集 )

智慧矿井智能分析数据集 数据1:数据1包含煤矿采掘工作面工人安全帽检测,工人行为检测(行走,站立,坐,操作,弯腰,靠,摔,爬),液压支撑防护…

C++ | Leetcode C++题解之第421题数组中两个数的最大异或值

题目: 题解: struct Trie {// 左子树指向表示 0 的子节点Trie* left nullptr;// 右子树指向表示 1 的子节点Trie* right nullptr;Trie() {} };class Solution { private:// 字典树的根节点Trie* root new Trie();// 最高位的二进制位编号为 30static…

en造数据结构与算法C# 用Unity实现简单的群组行为算法 之 对齐

en造数据结构与算法C# 用Unity实现简单的群组行为算法 之 聚集-CSDN博客 en造数据结构与算法C# 用Unity实现简单的群组行为算法 之 聚集-CSDN博客 演示 思路 1.检测 自然是沿用前两节的检测范围 2.对齐朝向 对齐朝向就是邻居鸟的forward加起来再除总数得到平均数 3.对齐…

企业急于采用人工智能,忽视了安全强化

对主要云提供商基础设施上托管的资产的安全分析显示,许多公司为了急于构建和部署 AI 应用程序而打开安全漏洞。常见的发现包括对 AI 相关服务使用默认且可能不安全的设置、部署易受攻击的 AI 软件包以及不遵循安全强化指南。 这项分析由 Orca Security 的研究人员进…