前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;

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

作者头像
一只
发布2023-11-03 09:27:27
发布2023-11-03 09:27:27
47800
代码可运行
举报
运行总次数:0
代码可运行

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

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

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

打印;

    }

}

​
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-11-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档