Linux进程间通信-3

本文介绍了Linux系统中进程间通信的两种机制——消息队列和信号量。消息队列作为一种内核中的优先级队列,提供生命周期长、自带同步互斥的数据块传输方式。而信号量则通过计数器和PCB等待队列实现同步和互斥,确保对共享资源的有序访问。通过理解这两者,我们可以更好地掌握进程间的同步与通信策略。
摘要由CSDN通过智能技术生成

承接上一篇Linux专栏中文章,我们来讲述进程间通信剩余部分的内容,即:消息队列和信号量,这也将是我们进程间通信模块的最后一篇内容。

目录

1.消息队列

2.信号量

3.总结

1.消息队列

作用:也是为了实现进程间的通信;

本质:是内核中的一个优先级队列;

原理:是多个进程访问同一个消息队列,通过添加数据节点和获取数据节点来实现通信。

消息队列的特性:

  • 生命周期随内核(管道随进程);
  • 自带同步和互斥;
  • 是一种数据块传输(管道是字节流传输);

2.信号量

作用:用于实现进程间的同步和互斥;

本质:是一个计数器 + pcb等待队列;

同步实现:分为两步操作,p操作 -- 对计数器进行-1,判断计数器是否大于等于0,正确则返回,失败则阻塞;v操作 -- 对计数器进行+1,判断计数器是否小于等于0,若满足则唤醒一个等待的进程。

于是我们可以通过计数器对系统中的共享资源进行计数:当获取资源之前进行p操作减1,计数满足访问条件则进行访问,不满足则阻塞;当产生一个资源则进行v操作加1,表示资源产生即可以唤醒阻塞的进程。

互斥实现:初始化计数器为1,表示资源只存在1个。当有进程访问资源时,进行p操作减1,访问完毕后进行v操作加1。这样的后续进程对共享资源进行访问的时候,便会阻塞。(类似于加锁)

3.总结

在了解完消息队列和信号量的主要内容和原理之后,我们进程间通信这一模块的内容也就到此为止。对于本文中提到内容的具体实现,由于笔者能力有限,先不做考究,待日后再来细究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值