一、P、V操作
信号量可以理解为“资源数”,假定信号量为s
P --> wait 操作
wait(S){
while(S<=0); /*S<=0表示资源不够,循环等待*/
S--; } /*资源够,占用一个*/
V --> signal操作
signal(S){
S++; } /*资源使用结束后,释放*/
【P、V操作均为原子操作,在执行过程中不能被中断】
二、信号量实现前驱关系
- 每一对前驱关系分别设置一个同步变量
- 在“前面的操作”后V(S)
- 在“后面的操作”前P(S)
以课本的习题为例:
这里的同步变量分别为a,b,c,d,e,f,g

部分代码框架如下:
p1() {S1; signal(a); signal(b);}
p2() {wait(a); S2; signal(c); signal(d);}
...
版权声明:本文为weixin_52137034原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。