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到底代表的是什么?能否举个例子说明,这种信号量和传统信号量的区别在哪里
谢谢各位大神
这两个函数PV不是原子的操作。S2可以表示一个阻塞队列或者就是资源的有无。S1实现阻塞队列和资源修改的互斥。