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);
- 操作术语</

本文介绍了System V信号量的基本概念,包括其作为进程间同步机制的作用,信号量的分类及其与共享资源的关系。重点讲解了如何使用System V信号量的API,如semget、semop和semctl,并详细阐述了信号量的P/V操作,以及在实际使用中的流程。
最低0.47元/天 解锁文章
8570

被折叠的 条评论
为什么被折叠?



