有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;

2023-11-03 09:27:27 浏览数 (1)

有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;P3 将缓冲区 2 中的内容打印出来,每执行一次打印一个记录。缓冲区的大小与记录大小一样。请用信号量机制来保证文件的正确打印。

代码语言:javascript复制
// 缓存区大小和记录大小一样 故无需控制大小

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

打印;

    }

}

​

0 人点赞