【Linux】学习记录_12_system-V IPC 信号量

12 system-V IPC 信号量

12.1 进程信号量基本概念

信号量本质是计数器,用于协调多进程间对共享数据对象的读取,不以传送数据为目的, 主要用来保护共享资源(信号量也属于临界资源),使该临界资源在一个时刻只有一个进程独享。

12.2 信号量的工作原理

信号量只能进行两种操作:等待(P操作)和发送信号(V操作),锁就是P操作,解锁就是V操作。 PV操作是计算机操作系统需要提供的基本功能之一,它们的行为是这样的:

  • P 操作:若有可用的资源(信号量值大于0),则占用一个资源(信号量值减一,进入临界区); 若无可用的资源(信号量值为0),则阻塞,直到系统将资源分配给该进程(进入等待队列,一直等到资源轮到该进程)。

  • V 操作:如果在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞的进程。如果没有进程等待它, 则释放一个资源(给信号量值加一)。

在信号量进行PV操作时都为原子操作(因为它需要保护临界资源)。

注:原子操作:单指令的操作称为原子的,单条指令的执行是不会被打断的

内核可对信号量(计数器)做加减操作,并且操作时遵守一些基本操作原则, 即:对计数器做加操作立即返回,做减操作要检查计数器当前值是否可减?(这个计数器的值要大于1), 如果是则进行减操作;否则将进程将阻塞等待,直到系统中有进程对该信号量进行P操作。

12.2.1 创建或获取一个信号量
12.2.2 semget创建/获取函数

semget函数的功能是创建或者获取一个已经创建的信号量,如果成功则返回对应的信号量标识符, 失败则返回-1。函数原型如下:

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>

int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值