有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;P3 将缓冲区 2 中的内容打印出来,每执行一次打印一个记录。缓冲区的大小与记录大小一样。请用信号量机制来保证文件的正确打印。
// 缓存区大小和记录大小一样 故无需控制大小
emtpy1 = 1;//缓冲区1互斥
emtpy2 = 1;//缓冲区2互斥
full1 = 0;//缓冲区1中的记录
full2 = 0;//缓冲区2中的记录
p1(){
while(1){
从磁盘读取一个记录;
p(emtpy1);
放入缓冲区1;
v(full1);//增加一个记录
}
}
p2(){
while(1){
p(full1);//等1中有记录
p(emtpy2);
v(full2);
从缓冲区1中取记录放入缓冲区2;
v(emtpy1);//释放缓冲区1
}
}
p3(){
while(1){
p(full2);//等缓冲区2中有记录
从缓冲区2中取出记录
v(emtpy2);//释放缓冲区2
打印;
}
}