首页 新闻 会员 周边 捐助

关于信号量的问题

0
悬赏园豆:100 [待解决问题]
 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到底代表的是什么?能否举个例子说明,这种信号量和传统信号量的区别在哪里
谢谢各位大神
  

Jinkingsley的主页 Jinkingsley | 初学一级 | 园豆:104
提问于:2015-04-11 09:19
< >
分享
所有回答(1)
0

这两个函数PV不是原子的操作。S2可以表示一个阻塞队列或者就是资源的有无。S1实现阻塞队列和资源修改的互斥。

Jinkingsley | 园豆:104 (初学一级) | 2015-04-11 17:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册