首页 > 代码库 > 进程通信之信号量笔记

进程通信之信号量笔记

                   信号量通信模块


信号量作用:主要的作用就是保护临街资源,也就是说,如果来年各

个进程都需要用到某个资源,那么通过信号量,让进程A和进程B分别占有
一定的信号量,每次信号量只能准许一个进程访问,信号量是有时间
限制的,这样就可以使两个进程都有机会访问同一个资源。

分类:
二值信号量 :信号灯的只能取0和1,类似互斥概念。当资源为可用的
时候,信号灯可以自己对资源信号灯进行修改,变为可用。二互斥锁概

念强调的是进程,进程占用完资源后,必须由该进程来解锁,

计数信号灯:信号灯的值可以取任意非负值。这种情况,就像我在工厂打工,
每次下班都在刷卡,第一次刷卡不成功,就不能在刷了,排在后面先让其他人

在刷,等其他人刷好了,你在刷,因为每个人刷卡的时间都是有限的,可以这

样理解,这样就避免了死锁灯问题。


创建 打开

int   semget(key_t key, int nsems,int semflg)


    key : 键值,上一篇博客有提到,第一步要做的事。
    nsems:  打开或者穿件信号灯集合数目;
    semflg:标识,和消息队列差不多;

 

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

参数:
semid:信号量集合的ip
sops;  操作数,表明要操作的内容
nsops: sops所指向的数组的元素个数;要多少个操作

 

 

struct sembuf{
   unsigned short sem_num;      //获取信号量的第几个,数组下表
   short sem_op;  //获取还是,释放信号量,1为释放,-1获取
   short sem_flg;              // 标志,IPC_NOWAIT,当操作数不满足是,立即返回错误
            
    IPC_UNDO程序无论正常还是不正常都释放信号量,避免死锁。


}

 

进程通信之信号量笔记