信号量机制
1965年由荷兰学者 Dijkstra 提出
一、概念
用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。
信号量甚实就是一个变量(可以是一个整数,也可以是更复杂的(数据结构)记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为 1 的信号量。
一对原语:
可以把原语理解为我们自己写的函数,函数名分别为 wait 和 signal, 括号里的信号量 S 其实就是函数调用时传入的一个参数。wait 、 signal 原语常简称为 P、V 操作(来自荷兰语 proberen 和 verhogen )。因此,做题的时候常把 wait(s) 、signal(S) 两个操作分别写为 P(S) 、 V(S)
- wait(S) 原语 (P 操作):检查资源情况并占用一个资源
- signal(S) 原语 (V 操作):释放产生一个资源
注:以下两种信号量的相关代码仅为伪代码逻辑实现,实际不算特别严谨(原子性等相关方面)
二、整型信号量
重点: 仍然不满足“让权等待”原则(有while存在,会发生“忙等”)
三、记录型信号量
重点: 解决了“忙等”问题,使用比整型复杂的数据结构
简单使用案例: