进程间通信(下)

一、消息队列

1.1 本质

消息队列是内核中创建的一个优先级队列,多个进程可以通过相同的标识符找到内核中同一个消息队列,从而通过添加节点或者获取节点信息实现数据传输。

1.2 基本结构

消息队列的描述信息
在这里插入图片描述
节点信息
在这里插入图片描述
这里的消息类型,不仅是优先级,还可以作为身份标识使用,防止某个进程读取数据时,读取到自己的数据。

1.3 特性

1.消息队列自带同步与互斥功能。
2.消息队列遵循先进先出的规则。
3.双工通信(同一时间信息可以进行双向传输)。
4.消息队列的生命周期随内核。

二、信号量

1.1 本质

本质:信号量本质是一个计数器(对资源进行计数),用于实现进程间的同步与互斥。

1.2 同步与互斥的原理

同步(保证资源访问你的合理性):
信号量对数据资源进行计数,所有的进程在访问数据之前,先访问信号量,如果当前计数>0,则可以访问,流程继续,并且计数-1,若当前计数<=0,则进程等待(将进程置为阻塞状态,陷入休眠),等待计数>0时(产生一个资源,计数+1),则唤醒等待的进程(将进程置为运行状态,开始调度),并且计数-1。
具体操作:
P操作:在访问临界资源之前,先进行P操作,可以访问则计数-1,不能访问,则进程陷入休眠。
V操作:在产生资源之后,进行V操作(计数+1),如果当前有等待的进程,则唤醒一个等待的进程。
互斥(保证资源访问的安全性)
同一时间只能有一个进程访问资源。保护临界资源访问的安全性。实现该方法的原理就是总是认为资源数只有一个,计数最大为1。
具体操作:
一个进程在访问资源之前,先访问信号量,进行P操作,计数-1,这是计数为0,其他进程就会进入休眠状态,当这个进程访问完毕后,进行V操作,计数+1,如果当前有等待的进程,则唤醒一个等待的进程(唤醒后,计数就会-1)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值