进程间通信:管道与信号量详解
1. 进程间数据传递——管道
在进程间传递数据时,管道是一种常用的方式。管道可分为无名管道和命名管道。
无名管道可以通过 popen 或 pipe 调用创建。利用管道和 dup 调用,能够将一个程序的数据传递到另一个程序的标准输入。例如,使用 popen 函数可以方便地创建一个连接到另一个进程的管道。
命名管道则允许在不相关的程序之间传递数据。通过创建命名管道,不同的程序可以通过它进行数据交互。
最后,还可以实现一个简单的客户端/服务器示例,使用FIFOs(先进先出队列)不仅能实现进程同步,还能实现双向数据流。
2. 信号量概述
在多用户系统、多进程系统或两者结合的环境中编写程序时,常常会遇到临界区代码。在临界区,需要确保单个进程或执行线程对资源具有独占访问权。
信号量是一种特殊的变量,只能取正整数,并且程序只能对其进行原子操作。信号量有两种基本操作: P (等待)和 V (信号)。这两个操作的名称源于荷兰语, P 代表“passeren”(通过,类似于临界区前的检查点), V 代表“vrijgeven”(释放,类似于放弃对临界区的控制)。
信号量可分为二进制信号量和通用信号量。二进制信号量只能取0和1两个值,是最常见的形式;通用信号量可以取多个正值。在大多数情况下,使用单个二进制信号量就可以解决问题。
超级会员免费看
订阅专栏 解锁全文
858

被折叠的 条评论
为什么被折叠?



