设有一缓冲池 P , P 中含有 20 个可用缓冲区,一个输入进程将外部数据读入 P ,另有一个输出进程将 P 中数据取出并输出。若讲程每次操作均以一个缓冲区为单位,试用记录型信号量写出两个进程的同步算法 , 要求写出信号量的初值。
解:
semaphore mutex=1;
semaphore empty=20;
semaphore full=0;
int in,out = 0;
item p [20];
void Producer(){
while(ture){
producer an item in nextp;
wait(empty);
wait(mutex);
p[in] := nextp;
in := (in+1) mod 20;
signal(mutex);
signal(full);
}
}
void Consumer(){
while(ture){
wait(full);
wait(mutex);
nextc := p[out];
out := (out+1) mod 20;
signal(mutex);
signal(empty);
}
}