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

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

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

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


486c33c2dd564ba496ef704666e30138.png

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

进程A可以通过消息队列的系统调用接口,把自己的数据块链入队列中

进程B也可以把自己的数据块链入队列中

这个队列就是一种共享资源

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

接口

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

3f757dd625354399945eb7b26e6031b2.png

key值含义与msgflg选项 不懂具体可以看 :system v 共享内存

返回值为消息队列的标识符


e49b170611424bdbbeb6fbeccff3166a.png

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

查看消息队列

输入 ipcs -q 指令

0e0a43a6d8d84782b61128cb86bc3681.png

删除消息队列 ipcs -q msqid值 即可删除

2.system V 信号量 (了解)

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


把大家都能看到的资源称为公共资源

1. 互斥:在任何时刻,都只允许一个执行流在进行共享资源的访问

2.临界资源 把任何一个时刻,只允许一个执行流在进行访问的共享资源,叫做临界资源

3. 临界区临界资源是要通过代码访问的,凡是访问临界资源的代码叫做临界区

4. 原子性 进行某些计算机操作时,要么不做要么就做完,只有两种确定状态的属性

不关心中间状态,只要求结果


2.认识信号量

通过一个故事来进行理解

想要去放映厅A看电影,这个放映厅是对所有人都共享的

但是每个人都是有自己的座位的,不能随便找个地方就坐


进放映厅是都需要买票的,买票的本质是:

1.对座位资源的预订机制

(买票的时候座位就已经属于你了)

2.确报不会因为多放出去特定的座位资源,而导致冲突

(不可能出现买票的人比座位多的情况发生)


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


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


信号量又称为信号灯

本质是一个计数器 即描述资源数量的计数器 假设为count

任何一个执行流,想访问临界资源的一个资源时,不能直接访问

如想看电影就直接冲入放映厅里随便找个座位,不管谁叫都不起来,不可以这样做的


必须先申请信号量资源,count 作为资源数量就会减1 即count–

只要申请信号量成功, 就一定能拿到一个子资源


进入自己的临界区,访问自己的临界资源

离开就要释放信号量资源,即count++ ,只要计数器进行了增加,就表示对应的资源进行了归还


96160f74db8045f0b9bfc231a5cebc5c.png

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


进程通过执行代码来申请,必须遵循规则,都必须先申请信号量,再释放信号量

遵循规则的前提是:所有的进程都得看到信号量

这样信号量本身就变成共享资源,这就需要信号量保证自身++或- -操作是原子的(要么就不加,要么就加完了),来保证自身安全


3. 接口

获取信号量

输入 man semget 指令


34a5c6e5425d42618aafd79e036417ea.png

key值与semflg选项可以去上面去寻找对应链接

nsems代表信号量数

返回的是信号量的计数器


ipcs -s 查看信号量


5b26a33f6e1b4889a49c27b6552c87cf.png

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

相关文章
|
8月前
|
消息中间件 Linux
Linux中的System V通信标准--共享内存、消息队列以及信号量
希望本文能帮助您更好地理解和应用System V IPC机制,构建高效的Linux应用程序。
278 48
|
9月前
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
620 20
|
10月前
|
Linux
【Linux】System V信号量详解以及semget()、semctl()和semop()函数讲解
System V信号量的概念及其在Linux中的使用,包括 `semget()`、`semctl()`和 `semop()`函数的具体使用方法。通过实际代码示例,演示了如何创建、初始化和使用信号量进行进程间同步。掌握这些知识,可以有效解决多进程编程中的同步问题,提高程序的可靠性和稳定性。
452 19
|
Docker 容器
14 response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file speci
14 response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file speci
291 1
|
28天前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
104 16
|
19天前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
|
3月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
669 13
|
4月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
558 21
|
4月前
|
JSON 自然语言处理 Linux
linux命令—tree
tree是一款强大的Linux命令行工具,用于以树状结构递归展示目录和文件,直观呈现层级关系。支持多种功能,如过滤、排序、权限显示及格式化输出等。安装方法因系统而异常用场景包括:基础用法(显示当前或指定目录结构)、核心参数应用(如层级控制-L、隐藏文件显示-a、完整路径输出-f)以及进阶操作(如磁盘空间分析--du、结合grep过滤内容、生成JSON格式列表-J等)。此外,还可生成网站目录结构图并导出为HTML文件。注意事项:使用Tab键补全路径避免错误;超大目录建议限制遍历层数;脚本中推荐禁用统计信息以优化性能。更多详情可查阅手册mantree。
linux命令—tree
|
2月前
|
Linux 网络安全 开发工具
技术栈:这50条最常用的 Linux 命令你一定要会!
建议多在终端中实践,遇到不懂的命令就用 man 或 --help 了解详情!
398 0