问题描述
- 关于操作系统信号量的问题:Implementing S as a Binary
-
1 //Implementing S as a Binary
2 //Data structures:
3 binary-semaphore S1, S2;
4 int C:
5 //Initialization:
6 S1 = 1
7 S2 = 0
8 C = initial value of counting semaphore S
9
10 //wait operation
11 S1=1, S2=0 and C=S initially
12 wait(S1);
13 C--;
14 if (C < 0) {
15 signal(S1);
16 wait(S2);
17 }
18 signal(S1);
19
20 //signal operation
21 wait(S1);
22 C ++;
23 if (C <= 0)
24 signal (S2);
25 else
26 signal (S1);可以理解这个是对原始信号量的一种改进,重新封装PV操作,C表示资源数。现在不太明白S1和S2到底表示什么?
S1和S2都是bool值,S1可以理解为互斥信号量。从代码来看,S1使得P和V操作不能同时进行,互斥(这么理解对吗?
或者S1表示什么呢?)
程序的大概描述是:
---P操作:首先获得“锁”S1,然后“消费”资源(C--),如果资源数为0(C==0,先执行C--后变为C<0)
释放锁,使得V操作执行,同时获得锁S2(暂时不能理解S2)
---V操作:同样先得到S1的锁,“生产”资源,若初始C==0,则释放S1,否则若初始C<=-1
通知S2
整个流程似乎是:初始C==0, V先执行,C=1(或2,3,4,...),执行P,C变为0(或-1,使得V操作继续进行)问题是不知道我这么想对不对?或者S1,S2到底代表的是什么?能否举个例子说明,这种信号量和传统信号量的区别在哪里
谢谢各位大神
时间: 2024-10-30 02:04:19