Linux进程间通信-3

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

目录

1.消息队列

2.信号量

3.总结

1.消息队列

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

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

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

消息队列的特性:

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

2.信号量

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

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

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

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

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

3.总结

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

猜你喜欢

转载自blog.csdn.net/m0_56821563/article/details/130075642