当前位置: 首页 > news >正文

【进程间通信】System V--消息队列和信号量

共同点

发现System V通信的接口很类似,底层也是用key来标识这个资源,用的是几乎同样的结构体来描述资源属性

消息队列的基本原理

了解即可

进程间通信的本质是让不同进程看到同一份资源

消息队列里的队列就是数据结构里的队列,A进程通过数据块的形式发送给B进程,B进程也可以通过数据块的形式发送给A进程,这些数据块就在内存中以队列的形式来组织,A,B进程怎么知道哪个是自己的数据块呢?这些数据块都是有类型的,进程们通过类型来寻找数据块

刚刚看到的消息队列的接口中,就有一个结构体,这个结构体就是数据块的类型和内容

 接口不讲怎么使用了,消息队列原理了解即可

IPC在内核中数据结构的设计----shmid的由来

信号量原理

阐述几个知识

1.A,B看到同一份资源,共享资源,如果不加保护,就会导致数据不一致问题

2.任何时候只允许一个执行流访问共享资源,叫互斥

3.共享的,任何时候只允许一个执行流访问的资源,叫临界资源,一般是内存空间

4.100行代码,5--10行是访问临界资源的代码,这几行代码叫做临界区

信号量本质是一把计数器,类似并不是int cnt=n,用来描述临界资源的多少

当一个执行流申请一个共享资源时,这个计数器就减减,当计数器减到0时,执行流就申请失败临界资源了,计数器资源就是计数器里的资源

1.申请到计数器资源,就有了临界资源的访问权限

2.申请到计数器资源,我们当前并没有访问这个临界资源,申请到计数器资源是对这个资源的预定机制

3.计数器可以有效保证进入共享资源的执行流数量

4.当我们想访问共享资源时,我们要先申请计数器资源

这个计数器就好比电影院买票,买了票就是对这个座位资源的预定,我们并没有立即去看,如果没去看这个座位也会空出来,好比执行流没有访问这个资源,其他执行流也不会访问

如果只有一个资源,只能有一个执行流去访问,我们把1,0两态的计数器叫二元信号量,本质是锁(后面的文章在详细讲)

思考:当我们想访问共享资源时,我们要先申请计数器资源,计数器资源不也是共享资源吗?

那就会有以下问题

怎么保证呢?

申请资源,本质是对cnt--,P操作,释放资源,本质是cnt++,V操作,申请和释放的PV操作是原子的,原子意思就是要么不做,做就做完,没有正在做的状态,这样的原子性就不会导致上面的问题

信号量为啥是进程间通信的一种? 

1.通信不仅是通信数据,互相协同也是

2.要协同,本质也是通信,信号量首先要被所有通信进程看到 

总结

1.执行流申请资源,必须先申请信号量资源,得到信号量之后,才能访问临界资源

2.申请信号量本质是对临界资源的预定机制

3.信号量的1,0两态,二元信号量,就是互斥功能

4.信号量本质是计数器,PV操作,原子的

信号量的接口太难了,详细请看线程的文章


http://www.mrgr.cn/news/22099.html

相关文章:

  • 还不会剪音乐?试试这四款在线音频剪辑
  • JVM - GC垃圾回收
  • 【docker】通过云服务器安转Docker
  • 2024年土建施工员考试题库及答案
  • SprinBoot+Vue公交智能化系统的设计与实现
  • SwiftUI 中如何花样玩转 SF Symbols 符号动画和过渡特效
  • 【基础算法总结】滑动窗口
  • 仕考网:事业编考试考什么?
  • 【Python知识宝库】Python中的装饰器:优雅地扩展函数功能
  • 技术点:tailwindcss还要chrome插件
  • 浙大数据结构:03-树3 Tree Traversals Again
  • idea如何配置模板
  • Leetcode面试经典150题-215.数组中的第K个最大元素
  • Java 面试题:Java的垃圾收集算法 --xunznux
  • java使用jfreechart生成图表
  • CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完
  • 无需更换摄像头,无需施工改造,降低智能化升级成本的智慧工业开源了
  • 设计模式-外观模式
  • 智能制造核心领域:自动化、物联网、大数据分析、人工智能在现代制造业中的应用与融合
  • 远程代码执行-Log4j2漏洞