IPC——信号量

本文介绍了信号量的基本概念,包括其作为进程间通信机制的作用,以及如何通过信号量实现资源保护和进程同步。文章详细解释了二值信号灯与计数信号灯的区别,并提供了信号量创建及操作的相关代码示例。

信号量的基本概念

信号量(又称信号灯)与其它进程间通信方式不大相同,主要用途是保护临近资源,进程可以根据它判断是否能否访问某些共享资源,除了用于访问控制外,还可以进行进程同步。

分类

二值信号灯:信号灯的值只能取零和一,类似于互质锁,但两者又不同:信号灯强调共享资源,只要共享资源可用,其它进程同样可以修改信号灯的值;互斥锁则更强调进程,占用资源的进程使用完毕后,必须由进程本身来解锁。

计数信号灯:信号灯的值可以取任意非负值

创建或者打开信号量:

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

int semget(key_t key, intnsems , int ****)

key: 键值,由ftok获得

nsems:指定打开或者创建新的信号灯集中将包含的信号灯的数目

****:标识,同消息队列

对信号量的操作:

int semop(int semid, struct sembuf *sops, unsigned nsops)

功能:对信号量进行控制

semid:信号量集的ID

sops:是一个操作数组,表明要进行什么操作

nsopssops所指向的数组的元素个数

struct sembuf{

unsigned shor sem_num;

short sem_op;

short **;

}

**标识可选择的有两种:

IPC_NOWAIT:对信号的操作不能满足时,semop()不会被阻塞,它会立即返回,同时设定错误信息。

IPC_UNDO:程序结束时(无论正常或者不正常)释放信号量,这样做的目的是在于避免程序在异常的情况下结束时未能将锁定的资源解锁,造成该资源永远锁定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值