进程间通信_信号量
信号量(有名:信号灯)与其他进程间通信方式不大相同,主要用途是**保护临界资源**。进程可以根据它判断是否能够访问某些共享资源。除了用于访问控制外,还可以用于**进程同步**。
分类
二值信号灯:信号灯的取值只能取0或者1,类似于互斥所。但两者有不同:信号灯强调共享资源,只要共享资源可用,其他进程同样可以修改信号灯的值;互斥所更加强调进程,占用资源的进程使用完资源后,必须由进程本身来解锁。
**计数信号灯:** 信号灯的值可以取任意非负值。
**创建/打开**
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/sem.h>
int semget(key_t key,int nests,int semflg)
**key:**键值,由ftok获得。
**nsems:**指定打开或者新创建的**信号灯集**中将包含含信号灯的数目。
**semflg:**标志,同消息队列。
**操作**
int semop(int semid,struct sembuf *sops,unsigned nsops)
**功能:**对信号量进行控制。
**semid:**信号量集的ID。
**sops:**是一个操作数组,表明要进行什么操作。
**nsops:**sops所指向的数组的元素个数。
**操作**
struct sembuf { unsigned short em_num; short sem_op; short sem_flg; }
sem_flg:信号操作标志,可能有两种选择:
IPC_NOWAIT:对信号操作不能满足时,semiop()不会阻塞,并立即返回,同时设定错误信息。
IPC_UNDO:程序结束时释放信号量,这样做的目地在于避免程序在异常情况下结束时未将锁定的资源解锁,造成该资源永远锁定。
MarkDown编辑器服务器有问题,写的东西发不上去。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/zhangli401x/article/details/47263503