41. 设由N个缓冲区组成缓冲池,每个缓冲区可以存放一个消息,有两个进程:生产者(producer)和消费者(consumer),且只要缓冲池未满,生产者便可以将消息送人缓冲池,而只要缓冲池未空,消费者就可以取走一个消息。各个进程对缓冲池进行互斥访问,用信号量实现协调过程。两个进程的处理过程如下:
Begin
S,S1,S2:SEMAPHORE;
S=1;S1=N;S2=0;
BUFFER[N]为缓冲区;I=J=0;
CoBegin
Process Producer:/*生产者进程*/
L1:生产一个消息M;
P(S1);
P(S);
BUFFER[I]=M;
I=(I+1)MOD N;
V(S2);
V(S);
GOTO L1;
Process Consumer:/*消费者进程*/
L2:
P(S2);
P(S);
M=BUFFER[J];
J=(J+1)MOD N;
V(S1);
V(S);
消费一个消息M;
GOTO L1;
COEND
请问信号量S、S1、S2的作用分别是什么?