【Linux篇】补充:消息队列和systemV信号量

消息队列

消息队列和共享内存都属于system V标准

创建消息队列:

system V信号量

铺垫:

共享内存:

让两个进程看到同一份资源来实现通信:

  • 让两个进程看到同一份资源这是提供了通信前提

  • 如果共享内存没有保护机制,会导致数据不一致

数据不一致的解决方案

  • 信号量

保护机制保护的是谁?或者说约束的是谁?

  • 临界区代码
  • 保护临界区代码就是变相的保护临界资源

什么是临界区?

其实就是访问共享内存的代码段,这部分就是临界区

为什么会数据不一致?

  • 存在没有被保护的共享资源

  • 各自的代码,访问了这个没有被保护的公共资源

  1. 多个执行流(进程)能看到的同一份公共资源:共享资源

  2. 被保护起来的共享资源叫做"临界资源"

  3. 在进程中,涉及到互斥资源的程序段叫做临界区---即访问该资源的代码段

  4. 多个执行流访问资源时,具有一定顺序性,叫做同步

什么是互斥

任何时刻,只允许一个执行流访问资源,叫做互斥

在申请锁的时候,必须是原子的

没当一个执行流进入临界区时,就会申请锁,这说明锁本身也是共享的

那么谁来保证锁的安全?

  • 申请锁的时候,必须是原子的

对共享资源进行保护实际上是对访问共享资源的代码进行保护

原子性是什么?

  • 要么做,要么不做

信号灯,本质是一个计数器,用来表明临界资源中,资源数量的多少

相关推荐
淼淼爱喝水18 分钟前
openEuler 下 Ansible 基础命令详解与实操演示2
linux·运维·windows
拾贰_C23 分钟前
【Ubuntu | install | 安装软件】 Ubuntu软件安装多种方式以及卸载
linux·运维·ubuntu
荒川之神34 分钟前
Oracle HR 模式递归函数练习(基于 employees 表)
数据库·oracle
小陈工43 分钟前
2026年3月31日技术资讯洞察:AI智能体安全、异步编程突破与Python运行时演进
开发语言·jvm·数据库·人工智能·python·安全·oracle
爱编码的小八嘎1 小时前
C语言完美演绎6-2
c语言
梦想的旅途21 小时前
效率革命:实现外部群聊信息的自动化同步方案
运维·自动化
·醉挽清风·1 小时前
学习笔记—Linux—信号阻塞&信号捕捉
linux·笔记·学习
杨云龙UP1 小时前
Linux生产环境下Oracle RMAN 备份、核查、清理与验证常用命令整理_20260330
linux·运维·服务器·数据库·oracle
橙子家1 小时前
关于列式存储(Column-base Storage)的几个要点解读
数据库
网硕互联的小客服1 小时前
CentOS系统如何卸载桌面并以shell 字符界面启动?
运维·服务器·网络·安全