王道操作系统笔记-进程(13)– 用信号量实现进程互斥、同步、前驱关系
信号量
为了方便理解,我们可以认为 信号量的值 = 这种资源的剩余数量
所以如果信号量的值小于0,说明此时有进程正在等待这个资源。
P(S) 也就是wait(S) —— 申请一个资源S。如果资源不够就阻塞等待。
V(S) 也就是signal(S) —— 释放一个资源S。如果有进程在等待该资源,则唤醒一个进程。
信号量机制实现进程互斥
信号量机制实现进程同步
实现进程同步的根本就是让必须后执行的代码需要获取到先执行的代码释放的资源后才能执行。
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
S = 0; //初始化信号量为0
P1(){
代码1;
代码2;
V(S); //释放资源
代码3;
}
P2(){
P(S); //请求资源
代码4;
代码5;
代码6;
}
我们可以看到,如果想让代码4一定在代码2后面执行,我们可以设计为执行代码4需要一个资源,而这个资源必须要等到代码2结束运行后才能被代码2释放。这样能保证了执行的顺序。