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

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

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++的“多态”,对于不同的通信方式传入的数据不同,会根据类型强转结构体,这样就能方便得到属性的操作了。

相关文章:

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

Linux基础内容(20)—— 共享内存_哈里沃克的博客-CSDN博客 目录 1.消息队列 1.定义 2.操作 2.信号量 1.定义 2.细节 3.延申 4.操作 3.IPC的特点共性 1.消息队列 1.定义 定义:是操作系统提供的内核级队列 2.操作 msgget:…...

STM32实现基于RS485的简单的Modbus协议

背景 我这里用STM32实现,其实可以搬移到其他MCU,之前有项目使用STM32实现Modbus协议 这个场景比较正常,很多时候都能碰到 这里主要是Modbus和变频器通信 最常见的是使用Modbus实现传感器数据的采集,我记得之前用过一些传感器都…...

springboot服务端接口公网远程调试 - 实现HTTP服务监听【端口映射】

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

zabbix监控之javasnmp自定义监控

1、客户端开启 java jmxremote 远程监控功能 上传 tomcat 软件包到 /opt 目录中 cd /opt tar zxvf apache-tomcat-9.0.16.tar.gz mv apache-tomcat-9.0.16 /usr/local/tomcat #配置 java jmxremote 远程监控功能 vim /usr/local/tomcat/bin/catalina.sh ...... #位置在 cygw…...

Inertial Explorer处理pospac数据总结

Inertial Explorer处理pospac数据的过程包括:1)从pospac提取出gps数据和imu数据;2)gps数据转成rinex格式;3)imu数据转成imr格式;4)IE对gps数据进行PPP解算;5)紧耦合融合解…...

tps和qps的区别是什么?怎么理解

区别:QPS指的是“每秒查询率”;而TPS指的是“事务数/秒”。理解:Tps即每秒处理事务数,对于一个页面的一次访问,形成一个Tps;而一次页面请求,可能产生多次对服务器的请求,服务器对这些…...

【Java系列】深入解析枚举类型

序言 即便平凡的日子仿佛毫无波澜,但在某个特定的时刻,执着的努力便会显现出它的价值和意义。 希望这篇文章能让你不仅有一定的收获,而且可以愉快的学习,如果有什么建议,都可以留言和我交流 问题 思考一下这寄个问题&a…...

网络原理(五):IP 协议

目录 认识IP 地址 子网掩码 作用 动态分配IP 地址 NAT 机制 认识MAC地址 MAC地址如何工作 网络设备和相关技术 集线器:转发所有端口 交换机:MAC地址转换表转发 主机&路由器:ARP缓存表ARP寻址 路由器:路由NAPT 数…...

MySQL---空间索引、验证索引、索引特点、索引原理

1. 空间索引 MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型 空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是: 类型 含义 说明 Geometry 空间数据 任何一种空间类型 Poi…...

选择合适的 MQTT 云服务:一文了解 EMQX Cloud Serverless、Dedicated 与 BYOC 版本

引言 EMQX Cloud 是基于 EMQX Enterprise 构建的一款全托管云原生 MQTT 消息服务。为了满足不同客户的需求,EMQX Cloud 提供了三种版本供客户选择:Serverless 版、专有版和 BYOC 版。 本文将简要介绍这三个版本的核心区别,并通过三个用户故…...

uvc驱动ioctl分析下

uvc驱动ioctl分析下 文章目录 uvc驱动ioctl分析下uvc_ioctl_enum_input枚举输入uvc_query_ctrl__uvc_query_ctrluvc_ioctl_g_input 获取输入uvc_ioctl_s_input 设置输入uvc_query_v4l2_ctrluvc_ioctl_queryctrl查询控制器uvc_ioctl_query_ext_ctrl查询扩展控制器 uvc_ioctl_g_c…...

数据库可视化神器,你在用哪一款呢

唠嗑部分 在我们日常开发中,作为开发者,与数据库是肯定要打交道的,比如MySQL,Oracle、sqlserver… 那么数据库可视化工具,你用什么呢?小白今天将常用地几款工具列一下,各位小伙伴如有喜欢的自…...

CMD与DOS脚本编程【第三章】

预计更新 第一章. 简介和基础命令 1.1 介绍cmd/dos脚本语言的概念和基本语法 1.2 讲解常用的基础命令和参数,如echo、dir、cd等 第二章. 变量和运算符 2.1 讲解变量和常量的定义和使用方法 2.2 介绍不同类型的运算符和运算规则 第三章. 控制流程和条件语句 3.1 介…...

多激光雷达手眼标定

手眼标定方法已经有很多博客进行解析,但是都是针对机器人的手(夹爪)眼睛(相机)进行标定。例如: 标定学习笔记(四)-- 手眼标定详解 手眼标定_全面细致的推导过程 本文主要描述多激光…...

SQL执行过程

1. select 语句执行过程 一条 select 语句的执行过程如上图所示 1、建立连接 连接器会校验你输入的用户名和密码是否正确,如果错误会返回提示,如果正确,连接器会查询当前用户对于的权限。连接器的作用就是校验用户权限 2、查询缓存 MySQL…...

K8S 部署 seata

文章目录 创建 Deployment 文件创建 ConfigMap 文件创建 Service 文件运行访问高可用部署踩坑 官方文档 k8s中volumeMounts.subPath的巧妙用法 创建 Deployment 文件 deploymemt.yaml namespace:指定命名空间image:使用 1.5.2 版本的镜像ports&#xf…...

ClickHouse:(二)数据类型

1.整型 固定长度的整型分为:有符号和无符合整型 有符号整型无符号整型类型范围类型范围Int8 -128 : 127 UInt8 0 : 255 Int16 -32768 : 32767 UInt16 0 : 65535 Int32 -2147483648 : 2147483647 UInt32 0 : 4294967295 Int64 -9223372036854775808 : 9223372036854…...

项目文档(request页面代码逻辑)

项目文档 目录 项目文档 1. 封装请求基地址 代码 2. 添加请求拦截器并设置请求头 作用 代码部分 3. 添加响应拦截器 作用 代码 4. token过期问题处理 5. 无感刷新 作用 代码 6. refresh_token过期处理 解决方式 1. 封装请求基地址 在src目录下 放上一个专门写…...

后端传到前端的JSON数据大写变小写--2023

问题复现:1. 首先我先说一下,我用了lombok,事实证明和这个也有关系 前端这里写的也是按照驼峰命名来写的 控制台打印出来的数据 后台打印出来的数据 解决方法: 1. 重写get/set方法 因为我在实体类上标注了Data注解 重写get/se…...

学习【菜鸟教程】【C++ 类 对象】【C++ 类的静态成员】

链接 1. 教程 可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。 静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Vue 模板语句的数据来源

&#x1f9e9; Vue 模板语句的数据来源&#xff1a;全方位解析 Vue 模板&#xff08;<template> 部分&#xff09;中的表达式、指令绑定&#xff08;如 v-bind, v-on&#xff09;和插值&#xff08;{{ }}&#xff09;都在一个特定的作用域内求值。这个作用域由当前 组件…...