进程-信号量
Comment介绍信号量之前,我们先介绍一下资源这些事
当多个进程同时访问一块共享空间的时候,会出现资源争夺的情况,最终导致数据混乱。
临界资源:只不能被多个进程同时访问的资源
同步与互斥
互斥:即同一时间只能有一个进程访问资源
同步:在互斥的基础上增加不同进程对资源的访问顺序
实现以上的手段便是信号量
信号量是什么?
信号量: 由内核维护的整数,其值被限制为大于或等于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);
//信号量操作函数,用于占用信号量、释放信号量、设置信号量等待
信号量集合的删除
//信号量集合调用 semctl 函数,设置命令为 IPC_RMID
ret = semctl(semid,IPC_RMID,NULL);
信号量同步