如下图所示,get、copy和put三个进程共用两个缓冲区s和t (其大小每次存放一个记录) ,get 进程负责不断地把输入记录输入缓冲区s 中,copy 进程负责从缓冲区s 中取出记录复制到缓冲区t 中,而put 进程负责从缓冲区t 中取出记录打印。试用PV 操作实现这三个进程之间的同步,并写出程序描述。
Semaphore empty_s=1;/* empty_s表示缓冲区s 是否为空,1为空,0为非空*/
Semaphore full_s=0;/* full_s表示缓冲区s 是否已满,1为满,0为非满*/
Semaphore empty_t=1;/* empty_t表示缓冲区t 是否为空,1为空,0为非空*/
Semaphore full_t=0;/* full_t表示缓冲区t是否已满,1为满,0为非满*/
get(){
while(1){
P(empty_s);
input data to buffer s;
V(full_s);
}
}
copy (){
while(1){
P(full_s);
copy data from buffer s;
V(empty_s);
P(empty_t);
input copy-data to buffer t;
V(full_t);
}
}
put(){
while(1){
P(full_t);
output data to printer;
V(empty_t);
}
}