Linux基础内容(21)—— 进程消息队列和信号量

news2024/12/23 14:14:45

Linux基础内容(20)—— 共享内存_哈里沃克的博客-CSDN博客

目录

1.消息队列

1.定义

2.操作

2.信号量

1.定义

2.细节

3.延申

4.操作

3.IPC的特点共性


1.消息队列

1.定义

定义:是操作系统提供的内核级队列

2.操作

msgget:获取消息队列

 key:操作系统层面创造消息队列

magflg:与共享内存一样,表示哪种方式创造

IPC_CREAT -- 指定的共享内存,不存在,创建;存在,共享内存标志返回

IPC_EXCL -- 无法单独使用;只有当 IPC_CREAT|IPC_EXCL 同时使用,如果不存在,创建,如果存在,出错返回

return:返回一个消息队列

msgctl:设置消息队列,可得到属性,或者退出。

msgsnd:发送消息

msqid:指定的消息队列名

msgp:发送的内容

msgsz:发送内容的大小

 msgrcv:读取消息

 

 查看当前存在的消息队列

2.信号量

查看信号量 

1.定义

本质:是一个计数器,通常用来表示公共资源中资源数量的多少问题

公共资源:同时被多个进程访问的资源

公共资源被利用分为两类:1.整体使用 2.划分为一部分使用

在进程大部分都是独立的,那么其实只有少部分公共资源

2.细节

注意:之所以需要公共资源,其实是为了满足进程间通信的目的,由于每一个进程都是独立的,所以必须有一块公共资源能让两个需要互相通信的进程看到,这样就达到了通信的目的。不过此时的公共资源是有一定问题的。因为此时我们的公共资源是没有做任何保护的,那么也就意味着如果一个进程还没有完全把数据输入到公共资源里,另外一个就已经读了,那么另外一个读到的资源就是不完整的。那么由此能知道:没有被保护的公共资源存在着数据不一致的问题。

那么将公共资源进行保护,该公共资源被称为临界资源。

进程通过对应的代码访问临界资源被称为临界区。

如何保护?

互斥和同步都能实现保护公共资源。

原子性:事情要么不做要么做完,只有两态的情况。

3.延申

1.信号量是计数器表示当前进程公共资源数的多少的,其实它需要被多个进程能看到,使用信号量也是一种公共资源。

2.为什么需要信号量?共享空间中,需要分配不同的公共资源划分区域。进程访问资源的一部分,需要先申请信号量,随后得到一个与该区域对应的信号量。这样就保护了临界资源。不过信号量也是一种公共资源,那么为了保护公共资源,信号量本身也需要被保护起来。信号量内部的加减操作由于被保护,所以具有原子性。

3.PV操作:预定公共资源使得信号量--为P操作;预定公共资源使得信号量++为V操作

4.信号量值为1:那么只有两种状态,用于互斥功能

4.操作

1.semget:申请信号量 

nsems:信号量的个数

2.semctl:信号量的查看信息和删除

3.semop: PV操作

 sops:

3.IPC的特点共性

1.其实我们根据共享内存,消息队列和信号量能知道,这些进程通信手段除了使得进程看到同一份资源所以开辟一块空间,作为内核级的数据,当然需要进行先描述后组织。

2.不过当我们观察不同通信描述的属性时,发现他们的接口调用都是XXXctl。并且其中是结构体也十分相似,并且IPC属性的结构体的第一个属性都是key。其实现就相当于C++的“多态”,对于不同的通信方式传入的数据不同,会根据类型强转结构体,这样就能方便得到属性的操作了。

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

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

相关文章

Java实现MQTT传输协议通信

Java实现MQTT传输协议通信 1. MQTT1.1 概述1.2 发布和订阅模型1.3 客户端1.4 服务器1.5 订阅、主题、会话1.6 协议中的方法2. Java使用MQTT2.1 添加 pom 依赖2.3 订阅方2.4 发布方2.4 MQTT 连接创建方式2.4.1 普通 TCP 连接2.4.2 TLS/SSL 连接1. MQTT

java_day01_单元测试_配置文件

一、软件的生命周期 **软件的可行性分析:**分析该软件是否值的研发,会消耗多少成本,能带来多少的利益等分析 **需求分析:**分析该软件具体该具备有那些功能,产品经理与客户一起讨论 **软件设计:**该软件应该使用什么样的架构,用什么样的数据库,每个模块的具体功能 **程序编…

2023年8大黑客编程语言

以下是2023年最适合黑客攻击的8种编程语言的列表。 道德黑客被定义为合法进入各种网络的做法,目的是识别黑客可能利用的潜在弱点来访问网络。此类黑客攻击旨在在任何漏洞进入危险攻击者手中之前发现它们,然后及时修复它们以防止攻击。让我们进入文章&am…

【数字通信】PAM基带信号的功率谱原理推导详解

PAM信号可以说是最简单的数字通信信号,很多理论最初都是由该信号的表达式推导得到并进行拓展的,纵观各类数字信号的表达式,或多或少都有PAM信号的“影子”,也就是说PAM信号相关的理论知识是最基本的,很有必要搞清楚,本博客主要讨论PAM基带信号的功率谱的原理及推导过程,…

我干了8年测试,告诉你现在软件测试还能不能找到工作!

观点:如果你还是以前的思维来学习测试,那你肯定是找不到工作! 我做测试工作有将近8年的时间,蚂蚁金服做过2年,因为加班太多离职了。目前在一家国企上市公司,一年能拿三四十个左右,对比头部互联…

系统集成项目管理工程师 下午 真题 及考点(2018年下半年)

文章目录 一:第4章 项目管理一般知识,项目管理办公室的职责。第6章 项目整体管理二:第5章 项目立项管理。第14章 项目采购管理,采购文件。第13章 项目合同管理,按项目 付款方式 划分的合同分类三:第9章 项目…

GB/T28181-2022针对H.265编码细化及技术实现

技术背景 新版国家标准GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》已于2022年12月30日发布,并将于2023年7月1日正式实施。 国家标准GB/T28181-2022《公共安全视频监控联网系统信息传输、交换、控制技术要求》规定了公共安全视频监控…

RocketMQ学习

各MQ 并发性能比较 吞吐量 kafka 17.3w/s rocketMQ 11.6w/s RabbitMQ 5.96w/s RocketMQ组件 broker 核心业务组件 nameServe 保存broker 的ip、端口、上下线信息等。 类似注册中心 启动nameServe 时会调用 runserver 启动broker ,会默认读取/conf/broker.conf …

第3章“程序的机器级表示”:程序编码 和 数据格式

文章目录 3.2 程序编码3.2.1 机器级代码3.2.2 代码示例3.2.3 关于格式的注解 3.3 数据格式 3.2 程序编码 假设写一个 C 程序,有两个文件 p1.c 和 p2.c。然后用 Unix 命令行编译这段代码: unix> gcc -O2 -o p p1.c p2.c命令 gcc 表明的就是 GNU C 编…

嵌入式 Linux 入门(十一、make 和 MakeFile)

嵌入式 Linux 入门第十一课,Make 工具和 Makefile 的引入...... 矜辰所致目录 前言一、Linux 下多文件编译二、make 工具和 Makefile2.1 make 和 Makefile 是什么?2.2 通过 STM32 提前熟悉 Makefile2.3 GCC 与 make 的关系/区别? 三、一个简单的 Makefi…

〖Python网络爬虫实战㉙〗- Selenium案例实战(三)

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…

OpenGL之着色器

文章目录 什么是着色器数据类型输入与输出Uniform三角形渐变色例子从文件中读取 什么是着色器 着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。着色器的开头总是要声明版本,接着是输入和输…

攻击面管理有多重要?从一个社工钓鱼的仿冒网站说起

2023年4月中旬,A企业紧锣密鼓地展开了重保前期的筹备。A企业是一家集团公司,业务范围广,资产众多,为了提前了解自身安全情况,探知未知风险,公司通过自身资产清单及配套手段对自身资产暴露情况进行了梳理。 …

总结springboot项目中一些后端接收前端传参的方法

文章目录 1、java方法入参里面什么注解都没有2、不使用&#xff1f;&来拼接参数&#xff0c;在参数中添加PathVariable注解3、RequestBody 先创建一个springboot项目&#xff0c;并在pom文件中添加web依赖&#xff1a; <dependency><groupId>org.springframewo…

Linux:LVM动态磁盘管理

Linux中的LVM是什么 LVM&#xff08;Logical Volume Manager&#xff09;是Linux系统中的一种动态分区技术&#xff0c;它允许将多个物理硬盘上的存储空间组合成一个或多个逻辑卷&#xff08;Logical Volume&#xff09;&#xff0c;并且可以在运行时对逻辑卷进行调整。LVM的设…

Unity UI -- (7) 创建世界空间UI

目前为止&#xff0c;我们已经设计了一个屏幕空间UI&#xff08;Screen Space UI&#xff09;。一个屏幕空间UI会在屏幕上平坦放置&#xff0c;它会被渲染到环境中所有东西的上面&#xff0c;无论相机位置在哪里。 而一个世界空间UI&#xff08;World Space UI&#xff09;能够…

什么是半实物仿真平台自动驾驶半实物仿真平台有哪些?

文章目录 半实物仿真平台介绍自动驾驶半实物仿真平台介绍1.CARLA2.AirSim3.LGSVL Simulator 半实物仿真平台介绍 半实物仿真平台是一种综合利用虚拟仿真和实际硬件设备的仿真系统。它将虚拟环境和真实硬件设备结合起来&#xff0c;旨在提供更真实、更准确的仿真体验。 在半实…

Hack The Box真实靶机环境搭建教程

Hack The Box真实靶机环境搭建教程 1.开启测试靶机的方法2.Windows连接HTB3.Kali连接HTB 1.开启测试靶机的方法 在机器列表中选择一台主机&#xff1a; 选择加盟主机&#xff1a; 靶机开启成功&#xff1a; 2.Windows连接HTB 下载安装OpenVPN&#xff1a; 下载VPN&#xff08…

Linux---文本处理命令(grep、wc、管道符 |)

1. grep命令 grep命令能够在一个或多个文件中&#xff0c;搜索某一特定的字符模式&#xff08;也就是正则表达式&#xff09;&#xff0c;此模式可以 是单一的字符、字符串、单词或句子。 注意&#xff1a;在基本正则表达式中&#xff0c;如通配符 *、、{、|、( 和 )等&#…

【STM32G431RBTx】备战蓝桥杯嵌入式→决赛试题→第十三届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.ADC:开启ADCsingle-ended 3.LED:开启PC8-15,PD2输出模式就行了…