用自己理解的语言描述,如有错误,请疯狂打脸没关系,希望能够指出来。
0. 几个概念
- 临界资源:一次只能共一个进程使用的资源。
- 互斥: 几个进程都需要同时使用同一临界资源。
- 同步:几个进程在某个任务点协调工作,次序等待。
- 信号量:
公用:实现互斥,初始值为1或资源数目。
私用:实现同步,初始值为0或某个正整数。
表现形式为一个整数S和一个队列。
S ≥ 0时,S代表某资源的可用数目,S < 0时,其绝对值代表队列中等待该资源的进程数。
1. PV操作
P(荷兰语passeren,通过)表示申请资源,V(荷兰语vrijgeven,释放)表示释放资源。
他们是一对,执行时不能被分割。
P操作,也称down() / wait()操作,使S=S-1,若S<0,进程暂停执行,放入等待队列。
V操作,也称up() / signal()操作,使S=S+1,若S≤0,唤醒等待队列中的一个进程。