System V 信号量
信号量的基本概念
什么是信号量
- 英文:semaphore,简称SEM,主要用来进程间同步
- 本质:内核维护的一个正整数,可对其进行各种操作+/-操作
- 分类:system V信号量、POSIX有名信号量、POSIX无名信号量
- 用途:用来标识系统中可用的共享资源的个数,协调各进程有序地使用这些资源,防止发送冲突
- 信号量类似酒店房间的房卡,房间资源是有限的、房卡也是有限的
- P操作:程序在进入临界区之前要先对资源进行申请
- V操作:程序离开临界区后要释放相应的资源,如房卡交给房东
通信原理
- 类似于房卡,不是单个值,而是一组(实际上是数组)信号量元素构成
- 将信号量设置成一个绝对值
- 在信号量当前值的基础上加上一个数量
- 在信号量当前值的基础上减去一个数量,降到0以下可能会引起阻塞
- 阻塞进程一直等待其他进程修改信号量的值,直到恢复正常运行
- 信号量本身无意义,通常会与一块临界资源(如共享内存) 关联使用
使用system V 信号量
相关API
- 获取信号量ID:int semget(key_t key, int nsems, int semflg);
- P/V操作:int semop(int semid, struct sembuf *sops, size_t nsops);
- 操作术语</