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

消息队列

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

创建消息队列:

system V信号量

铺垫:

共享内存:

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

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

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

数据不一致的解决方案

  • 信号量

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

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

什么是临界区?

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

为什么会数据不一致?

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

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

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

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

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

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

什么是互斥

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

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

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

那么谁来保证锁的安全?

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

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

原子性是什么?

  • 要么做,要么不做

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

相关推荐
知行合一。。。3 小时前
RAG--03--Milvus基本用法
数据库·oracle·milvus
志栋智能4 小时前
超自动化运维如何支持合规审计?
运维·自动化
TDengine (老段)4 小时前
TDengine 线程模型 — 网络、调度、执行
大数据·数据库·物联网·制造·时序数据库·tdengine·涛思数据
小诗懂技术4 小时前
【网络通信UDP】基础 进程间不同主机的通信
运维·服务器·网络
weixin_440730504 小时前
selenium实战记录-从登陆-首页-进入应用流程用例三种参数化+日志+报告
服务器·selenium·测试工具
名字还没想好☜4 小时前
Docker 容器安全加固实战:非 root、只读根文件系统、drop capabilities 与最小攻击面
运维·安全·docker·容器·kubernetes
琥珀色糖4 小时前
Linux守护进程
linux·终端·守护进程·会话·进程组
鹤落晴春5 小时前
有状态应用 vs 无状态应用
运维·云原生·k8s
Hstar_chen5 小时前
开源一款 HarmonyOS 服务器监控客户端:星辰云巡 1.0.3
服务器·华为·harmonyos
上学的小垃圾5 小时前
01-数据库系统概述
数据库