IPC_简单应用信号量实现进程间通信

本文通过一个情景模拟介绍如何使用信号量进行进程间通信,以确保在多个进程中对共享资源的正确访问。文中详细阐述了设计方案,包括自主实现的函数与库函数的结合,并介绍了相关信号量控制函数如semget、semctl和semop的使用。同时,提供了头文件、源文件及测试文件的概览。
摘要由CSDN通过智能技术生成

  --------参考文献   W.Richard Stevens, Stephen A.Rago.UNIX环境高级编程[M].北京:人民邮电出版社,2014.6:455-459.

目录

一、问题引出

1.1 情景模拟

1.2 设计方案

1.3 相关知识

二、 代码实现

2.1 头文件semaphore.h

2.2 源文件semaphore.c

2.3 测试文件a.c和b.c


一、问题引出

1.1 情景模拟

某进程向某个txt文件写入"hello",另一进程向该txt文件读出已经写入的"hello"并在屏幕上打印输出。

毋庸置疑,写完了才能读取,读取完了才能写入。这两个进程运行时就需要额外施加同步控制(边读边写会导致不可预料的后果)。在本情景下,该txt文件被看成是资源,而且只有一份。

生活中,比较贴切的例子就是打印店的打印机,假设打印机一共有5台,每台电脑到底使用哪台打印机是未知的,因为电脑对任何一台打印机都没有特殊要求。打印机就被看成是资源,而且有5份。

举这个例子是为了说明,资源不是总是只有1份的,而且申请资源或释放资源时不总是一份份地申请或释放。一切都按照实际需求去做

1.2 设计方案

图1 设计方案

如图1所示,自主实现的函数用蓝色圆角矩形框起来,库函数用橘色椭圆框起来, 我们实现的,实际上更多的是业务处理,并非底层实现。自主实现的函数内部到最后都会去转调库函数(代理)。

1.3 相关知识

创建一个信号量集或者打开一个现有信号量集函数semget

#include<sys/sem.h>

int semget(key_t key, int nsems, int flag);
//返回值:若成功,返回信号量ID;若出错,返回-1。
  • key用于变换标识符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值