【Linux】:消息队列和信号量

消息队列和信号量

一.消息队列

1.原理

这种消息队列被称为system V标准。

可以使用ipcs -q来查询消息队列,用ipcrm -q+msqid来删除消息队列。

2.消息队列的各种接口

1.创建消息队列

第一个参数

第二个参数

2.释放消息队列

第一个参数:就是msgget的返回值(队列的唯一标识符)

第二个参数:要进行什么操作。(有许多参数可以自行查看,这里使用 IPC_RMID删除该队列)

第三个参数:各种队列的的属性。

3.发送和接收信息

发送消息

第一个参数:队列的唯一标识符。

第二个参数:数据块的起始地址。

第三个参数:数据块的大小。

第四个参数

接收消息

前三个和第五个参数与读一致。

第四个参数:读取数据的类型。

'

二.信号

1.概念

解释一个现象:多进程,多并发打印时会屏幕出现错乱,命令行重叠...就是因为屏幕也是文件,没有进行互斥保护。

理解信号量(信号灯)

信号量(灯)的本质就是一个计数器。描述临界资源的资源数。

如果一个临界资源只能由一个执行流访问,像这种只有0,1两态的计数器称为二元信号量--本质就是一个锁!

PV操作

申请信号量,简单来说就是对计数器减减------P操作。 释放信号量,简单来说就是对计数器加加------V操作。

申请和释放的PV操作------原子的(要么不做,要么就做完,没有正在做的概念)。

2.各种接口

1.创建信号量

第一个参数:key值可以参考共享内存和消息队列的key值,就不再过多描述。

第二个参数:要创建信号的数量。

第三个参数:也参考共享内存和消息队列的flg。

返回信号量的唯一标识符。

2.销毁信号量

第一个参数:信号量标识符。

第二个参数:信号量个数。

第三个参数:可以传各种控制操作(传IPC_RMID表示删除)。

3.对信号量进行操作

第一个参数:信号量唯一标识符。

第二个参数:需要自定义一个sembuf类型的结构体,里面要包含操作哪一个信号量,信号量的操作(1代表实现V操作,-1代表实现P操作)

三.一个现象

不论是之前的共享内存,还是消息队列,还是信号量...这些systemV类型通信方式,它都会先进行组织,也就是建立对应属性的结构体。

共享内存

消息队列

信号量

这些结构体的第一个参数都是struct ipc_perm类型。操作系统统一将这一类的结构体的地址存放在struct ipc_permarr[]数组里。所以如果我们需要对资源进行增删查改就转化成了对该数组进行增删查改。

相关推荐
代码游侠5 分钟前
复习——SQLite3 数据库
linux·服务器·数据库·笔记·网络协议·sqlite
Hello.Reader5 分钟前
Flink OLAP Quickstart把 Flink 当成“秒级交互查询”的 OLAP 服务来用
数据库·sql·flink
chenyuhao20242 小时前
Linux网络编程:传输层协议UDP
linux·服务器·网络·后端·udp
小鹏linux2 小时前
【linux】进程与服务管理命令 - batch
linux·运维·服务器
人工智能训练8 小时前
OpenEnler等Linux系统中安装git工具的方法
linux·运维·服务器·git·vscode·python·ubuntu
点云SLAM9 小时前
BOOS库中Graph模块boost::edge_reverse_t和boost::vertex_color_t解读
数据库·edge·图论·bfs·dfs/拓扑排序·boost库、
尽兴-9 小时前
《深入剖析:全面理解 MySQL 的架构设计》
数据库·mysql·数据库架构设计·理解mysql架构
郭涤生9 小时前
第十章_信号_《UNIX环境高级编程(第三版)》_笔记
服务器·笔记·unix
在风中的意志9 小时前
[数据库SQL] [leetcode] 2388. 将表中的空值更改为前一个值
数据库·sql·leetcode
QT 小鲜肉9 小时前
【Linux命令大全】001.文件管理之which命令(实操篇)
linux·运维·服务器·前端·chrome·笔记