【Linux】system V 消息队列 | system V 信号量(简单赘述)

news2024/9/19 10:35:56

文章目录

    • 1 . system V 消息队列(了解)
      • 接口
      • 查看消息队列
    • 2.system V 信号量 (了解)
      • 1.进程互斥等概念的理解
      • 2.认识信号量
      • 3. 接口

这两部分主要是了解即可,为后面学习做铺垫

1 . system V 消息队列(了解)


为了让两个进程间通信 创建一个队列queue

进程A可以通过消息队列的系统调用接口,把自己的数据块链入队列中
进程B也可以把自己的数据块链入队列中
这个队列就是一种共享资源

进程A想要读取数据时,只需要在队列中读取不是自己的数据

接口

创建消息队列 , 输入 man msgget 指令

key值含义与msgflg选项 不懂具体可以看 :system v 共享内存
返回值为消息队列的标识符


操作系统要把多种消息队列管理起来,先描述在组织,每一个消息队列都有自己的结构体对象,对应的结构体对象包含当前消息队列的属性

查看消息队列

输入 ipcs -q 指令
在这里插入图片描述
删除消息队列 ipcs -q msqid值 即可删除

2.system V 信号量 (了解)

1.进程互斥等概念的理解

把大家都能看到的资源称为公共资源
1. 互斥:在任何时刻,都只允许一个执行流在进行共享资源的访问
2.临界资源 把任何一个时刻,只允许一个执行流在进行访问的共享资源,叫做临界资源
3. 临界区临界资源是要通过代码访问的,凡是访问临界资源的代码叫做临界区
4. 原子性 进行某些计算机操作时,要么不做要么就做完,只有两种确定状态的属性
不关心中间状态,只要求结果

2.认识信号量

通过一个故事来进行理解
想要去放映厅A看电影,这个放映厅是对所有人都共享的
但是每个人都是有自己的座位的,不能随便找个地方就坐


进放映厅是都需要买票的,买票的本质是:
1.对座位资源的预订机制
(买票的时候座位就已经属于你了)
2.确报不会因为多放出去特定的座位资源,而导致冲突
(不可能出现买票的人比座位多的情况发生)


每一个人可以看作一个执行流,当想访问某一个内存空间时,通过买票预订机制就不会出现访问空间出现冲突

如果放映厅是顶级VIP级别,只有一个座位 ,当这个座位对应的票被预订了,其他人就不会预定了,所以看电影期间,不会有人打扰,就相当于完成互斥功能


信号量又称为信号灯
本质是一个计数器 即描述资源数量的计数器 假设为count
任何一个执行流,想访问临界资源的一个资源时,不能直接访问
如想看电影就直接冲入放映厅里随便找个座位,不管谁叫都不起来,不可以这样做的


必须先申请信号量资源,count 作为资源数量就会减1 即count–
只要申请信号量成功, 就一定能拿到一个子资源

进入自己的临界区,访问自己的临界资源
离开就要释放信号量资源,即count++ ,只要计数器进行了增加,就表示对应的资源进行了归还


进入临界区前申请信号量(P操作),退出临界区前释放信号量(V操作)

进程通过执行代码来申请,必须遵循规则,都必须先申请信号量,再释放信号量
遵循规则的前提是:所有的进程都得看到信号量
这样信号量本身就变成共享资源,这就需要信号量保证自身++或- -操作是原子的(要么就不加,要么就加完了),来保证自身安全

3. 接口

获取信号量
输入 man semget 指令

key值与semflg选项可以去上面去寻找对应链接
nsems代表信号量数
返回的是信号量的计数器


ipcs -s 查看信号量

ipcrm -s +信号量id 删除信号量

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

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

相关文章

Python——第2章 数据类型、运算符与内置函数

目录 1 赋值语句 2 数据类型 2.1 常用内置数据类型 2.1.1 整数、实数、复数 2.1.2 列表、元组、字典、集合 2.1.3 字符串 2.2 运算符与表达式 2.2.1 算术运算符 2.2.2 关系运算符 2.2.3 成员测试运算符 2.2.4 集合运算符 2.2.5 逻辑运算符 2.3 常用内置…

Kubernetes 笔记(15)— 应用保障、容器资源配额、容器状态探针概念及使用

作为 Kubernetes 里的核心概念和原子调度单位,Pod 的主要职责是管理容器,以逻辑主机、容器集合、进程组的形式来代表应用,它的重要性是不言而喻的。 在上层 API 对象的基础上,一起来看看在 Kubernetes 里配置 Pod 的两种方法&…

dell t630服务器风扇控制笔记记录(耗时一天)

1、打开虚拟控制台得用IE; 2、Dell PowerEdge T640 加装显卡之后风扇狂转问题解决 - 知乎 感谢知乎Billy, 操作步骤: 1、查看iDrac版本,必须在3.30.30.30及以下,之后的版本关闭了手动控制风扇转速的权限&#xff0…

从视图树到GPU:探索Android渲染机制

简介 在 Android 中,渲染技术可以分为 CPU 渲染和 GPU 渲染两种方式。CPU 渲染是直接使用 CPU 处理数据,并将其显示在屏幕上,而 GPU 渲染则是将数据传递给 GPU 进行处理和显示。 具体的渲染技术如下: Canvas绘图:An…

多层感知器介绍

一、概览 现实世界中很多真实的问题都不是线性可分的,即无法使用一条直线、平面或者超平面分割不同的类别,其中典型的例子是异或问题(Exclusive OR,XOR),即假设输入为x1和x2,如果它们相同&…

Linux远程访问及控制SSH命令

目录 一. SSH服务1.1 SSH基础1.1.1什么是SSH服务器?1.1.2SSH优点1.1.3常见的ssh协议 二. 服务端配置文件常用选项2.1设置白名单2.2设置黑名单 三. SSH服务的两种验证方式3.1 公钥与私钥的关系 四. ssh客户端程序4.1ssh远程登录4.2 scp 远程复制4.3 sftp 安全的ftp 五…

Direct3D 12——计算着色器——计算着色器概念

计算着色器虽然是一种可编程的着色器,但Direct3D并没有将它直接归为渲染流水线中的一部分。虽然如此,但位于流水线之外的计算着色器却可以读写GPU资源。从本质上来说,计算着 色器能够使我们访问GPU来实现数据并行算法,而不必渲染出…

ESP32设备驱动-BH1745NUC 亮度和颜色传感器驱动

BH1745NUC 亮度和颜色传感器驱动 文章目录 BH1745NUC 亮度和颜色传感器驱动2、硬件准备3、软件准备4、驱动实现BH1745NUC 是具有 IC 总线接口的数字颜色传感器 IC。 该 IC 感应红光、绿光和蓝光 (RGB) 并将它们转换为数字值。 高灵敏度、宽动态范围和出色的 Ircut 特性使该 IC …

【CSS3】CSS3 伪元素字体图标 ( 生成 icommon 字体文件 | 字体图标基本使用 | 使用伪元素实现 icommon 字体图标显示 )

文章目录 一、icommon 字体图标基本使用1、生成 icommon 字体文件2、字体图标基本使用 二、使用伪元素实现 icommon 字体图标显示 一、icommon 字体图标基本使用 字体图标 指的是 将图标做成字体样式 , 在 放图标的地方 使用 文字 即可实现 图标显示 ; 1、生成 icommon 字体文件…

Vue2-黑马(十三)

目录: (1)实战-permissions.js-动态路由 (2)实战-第三方登录-流程分析 (3)实战-第三方登录-代码解读 (1)实战-permissions.js-动态路由 在做根据用户角色动态生成路由…

【Unity+MySQL】实现注册登录系统(升级版)

目录 1 UI界面重新设计1.1 注册界面1.2 登录界面1.3 交互实现 2 注册功能完善2.1 判断用户输入的用户名是否与数据库中的重复2.2 将当前时间更新至用户表的当前注册时间列2.3 将用户输入的注册密码使用哈希加密 3 登录功能完善 接着 上篇文章所谈到的系统缺陷,这篇…

==与equals()的理解

java中的数据类型分为基本数据类型、基本数据类型对应的包装类型(引用类型),引用类型三种数据类型。 每一个基本类型java都提供了一个与之对应的包装类型,该包装类型是一个引用类型,并且在基本类型与包装类型之间提供了自动拆箱和…

AD21原理图----网络连线(网络线、网络标签、总线、差分对、信号线束)

目录 网络连线 网络线(Wire) 网络标签 总线 差分对 信号线束 网络连线 网络线(Wire) 网络标签 可以跨原理图 总线 用于放置同一类数据 使用步骤 第一步:先绘制网络线 第二步:利用网络标签进行连接&a…

虚拟机下Ubuntu系统的Docker部署

虚拟机下Ubuntu系统的微服务项目Docker部署 文章目录 虚拟机下Ubuntu系统的微服务项目Docker部署1、Ubuntu安装 Docker2、修改后端微服务的配置2.1 修改 MySQL 的配置2.2 修改 Redis 的配置2.3 修改 Nacos 的配置 3、生成微服务镜像4、拉取远程镜像5、生成前端镜像5.1 准备文件…

MacOS安装MongoDB与Redis

1.安装MongoDB: brew tap mongodb/brew brew install mongodb-community 后台服务方式运行mongodb: brew services restart mongodb/brew/mongodb-community 直接运行mongodb非后台服务 /usr/local/opt/mongodb-community/bin/mongod --config /usr/local/etc/mongod.con…

化工行业数字化“智能工厂”-解决方案(ppt可编辑)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除。 总体架构 设计理念—数据集成与流转 九大核心价值之一 九大核心价值之二 九大核心价值之三 九大核心价值之四 九大核心价值之五 九大核心价值之六 九大核心价值之七 九大核心…

数据库学习-常用的SQL语句

背景: 汇整一下自己学习数据库过程中常见的题目及语句。 一.实例分析题 二.简单SQL查询: 1):统计每个部门员工的数目select dept,count(*) from employee group by dept;2):统计每个部门员工的数目大于一个的记录se…

3.4 迭代法

4.1 雅克比迭代法: 雅可比迭代法是一种用于求解线性方程组的迭代算法,其基本思想是将线性方程组中的系数矩阵拆分为对角线矩阵和非对角线矩阵两部分,并利用对角线矩阵的逆矩阵来迭代求解方程组。 具体地,设线性方程组为Axb&…

操作系统笔记--虚拟内存的使用

1--背景概念 在计算机系统中,当多道程序同时运行时可能会出现内存不足的情况,一般可通过以下技术进行解决: 覆盖技术: 当程序太大超出内存容量时,可以采用手动覆盖的技术,只把需要的指令和数据保存在内存当…

SSM整合、环境配置以及基础综合测试(单表查询、多表查询和数据分页、前后端分离、Vue3)

SSM整合、环境配置以及基础综合测试 准备:创建maven项目以及项目框架准备 SSM整合简介 介绍: SSM(SpringSpringMVCMyBatis) 整合,就是三个框架协同开发。Spring整合Mybatis就是将Mybatis核心配置文件当中数据源的配置、事务处理、以及工厂的配置&…