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

消息队列

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

创建消息队列:

system V信号量

铺垫:

共享内存:

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

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

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

数据不一致的解决方案

  • 信号量

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

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

什么是临界区?

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

为什么会数据不一致?

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

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

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

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

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

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

什么是互斥

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

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

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

那么谁来保证锁的安全?

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

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

原子性是什么?

  • 要么做,要么不做

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

相关推荐
馨谙3 小时前
OpenSSH 安全配置核心概念解析
linux·服务器·网络
半桔3 小时前
【IO多路转接】IO 多路复用之 select:从接口解析到服务器实战
linux·服务器·c++·github·php
无聊的小坏坏3 小时前
从零开始:C++ 线程池 TCP 服务器实战(续篇)
服务器·c++·tcp/ip
ink@re3 小时前
Linux iptables:四表五链 + 实用配置
linux·运维·服务器
小年糕是糕手3 小时前
【C语言】函数栈帧的创建和销毁
java·c语言·开发语言·数据结构·c++·链表
共享家95273 小时前
Linux 信号控制
linux·服务器
努力努力再努力wz3 小时前
【Linux进阶系列】:信号(下)
java·linux·运维·服务器·开发语言·数据结构·c++
21号 13 小时前
21.事务和锁(重点)
开发语言·数据库
又见野草3 小时前
软件设计师知识点总结:结构化开发
数据库·webview·结构化开发
TU^3 小时前
C语言习题~day27
c语言·数据结构·算法