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

消息队列

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

创建消息队列:

system V信号量

铺垫:

共享内存:

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

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

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

数据不一致的解决方案

  • 信号量

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

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

什么是临界区?

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

为什么会数据不一致?

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

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

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

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

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

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

什么是互斥

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

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

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

那么谁来保证锁的安全?

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

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

原子性是什么?

  • 要么做,要么不做

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

相关推荐
AI_Auto3 分钟前
数字化转型-制造业未来蓝图:“超自动化”工厂
运维·自动化
一川月白7094 分钟前
C语言---万能指针(void *)、查找子串(strncmp函数的应用)多维数组(一维数组指针、二维数组指针)、返回指针值函数、关键字(const)
c语言·指针·const·万能指针·查找子串·多维数组指针
路溪非溪7 分钟前
Linux定时器和时间管理源码相关总结
linux
千册2 小时前
python+pyside6+sqlite 数据库测试
数据库·python·sqlite
java叶新东老师4 小时前
PowerDesigner 画ER图并生成sql 教程
数据库·sql
Jonariguez4 小时前
Mysql InnoDB存储引擎
数据库·mysql
nbsaas-boot5 小时前
SQL Server 窗口函数全指南(函数用法与场景)
开发语言·数据库·python·sql·sql server
Y.ppm5 小时前
数分思维12:SQL技巧与分析方法
数据库·sql
森叶5 小时前
Claude Code 安装向量数据库MCP服务
数据库
bestsun9995 小时前
Time drifts can result in unexpected behavior such as time-outs.
数据库·oracle