进程-信号量

介绍信号量之前我们先介绍一下资源这些事
当多个进程同时访问一块共享空间的时候会出现资源争夺的情况最终导致数据混乱
临界资源只不能被多个进程同时访问的资源
同步与互斥
互斥即同一时间只能有一个进程访问资源
同步在互斥的基础上增加不同进程对资源的访问顺序
实现以上的手段便是信号量
信号量是什么
信号量: 由内核维护的整数,其值被限制为大于或等于0


信号量集合的创建

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int semget(key_t key, int nsems, int semflg);  

初始化信号量

int semctl(int semid, int semnum, int cmd, …);  

信号量的操作

int semop(int semid, struct sembuf *sops, size_t nsops);
//信号量操作函数<span class="bd-box"><h-char class="bd bd-beg"><h-inner>,</h-inner></h-char></span>用于占用信号量<span class="bd-box"><h-char class="bd bd-beg"><h-inner>、</h-inner></h-char></span>释放信号量<span class="bd-box"><h-char class="bd bd-beg"><h-inner>、</h-inner></h-char></span>设置信号量等待  

信号量集合的删除

//信号量集合调用 semctl 函数<span class="bd-box"><h-char class="bd bd-beg"><h-inner>,</h-inner></h-char></span>设置命令为 IPC_RMID
ret = semctl(semid,IPC_RMID,NULL);  

信号量同步