一、消息队列
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)。