- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
读者写者问题-操作系统实验报告
实验内容
1、定义一个数据缓存buffer及用于实现同步互斥的信号量。
2、定义一个读者函数:
当有写者在占用buffer时,读者应该等待,直到写者不再使用该buffer。
当有其他读者在占用buffer时,读者可对buffer进行读取操作。
当buffer中有数据时,则从其中读取一个数据,并显示然后退出。
当buffer中没有数据时,应等待,直到buffer中有数据可读。
3、定义一个写者函数
当有读者在占用buffer时,写者应该等待,直到所有的读者都退出为止。
当有其他写者占用buffer时,该写者应该等待,直到占用buffer的写者退出为止。
当buffer有空闲时,写者应该在buffer中写入一个数据并退出。
当buffer满时,写者应该等待,直到buffer有空闲为止。
4、定义主函数,在其中可以任意创建读者与写者。
可根据用户输入创建读者或写者进程(线程)。
5、用户界面
实验当堂所要完成事情列表:
调试程序使其在读者优先模式下可以运行并且能实现基本的功能得出正确的结果:能够实现读写互斥,写写互斥,读读不互斥,一个进程结束能够唤醒等待队列中的进程(先读者队列后写着队列)
根据实验要求完善功能:由用户决定写者向缓冲区中写入的内容,读者能够读出并显示出来;当缓冲区中没有数据时,读者要等待,直到缓冲区中有数据才能读
根据“读者优先”加以改变,增加一个“写者优先”模式,并且由用户来选择模式
源代码:
#includestdio.h
#includestdlib.h
int rcount=0;//正在读的读者数量
int wcount=0;//写者队列中等待写操作的写者数量
int read_id=0;//读进程号
int write_id=0;//写进程号
int w=1;//读写互斥信号量
char temp[300] = {\0};
int choice; //用户选择读者优先OR写者优先
int sign; //标识temp空的信号量 0表示temp空
void WFwakeup();
void RFwakeup();
struct rqueue{//读者等待队列
int readers[200];
int index;
}rq;
struct wqueue{//写者等待队列
int writers[200];
int index;
}wq;
/*void first(){ //初始化
int i;
rq.index = 0;
wq.index = 0;
for(i = 0;i20;i++){
rq.readers[i] = 0;
wq.writers[i] = 0;
}
}*/
//*******************************************读进程读操作
void read(){
int i = 0;
read_id++;
if(rcount == 0){//当前没有读进程在读 可能有写进程在写 可能CPU空闲
if(w==1) {//如果CPU空闲,读者拿到CPU
w--;// 相当于一个P操作
rcount++;
if(temp[0] == \0){
sign = 0;
if(choice == 1){
rq.readers[rq.index++]=read_id;//将读者进程加入等待队列
RFwakeup();
return;
}
else{
rq.readers[rq.index++]=read_id;//将读者进程加入等待队列
WFwakeup();
return;
}
}//if
printf(读者%d正在读\n,read_id);
for(i = 0;i 300;i++){//读取temp内容 即写者写的内容
if(temp[i] == \0){
printf(\n);
return;
}//if
printf(%c,temp[i]);
}//for
}//if
else{//写者线程正在执行
printf(!有写者在写不能读!\n);
rq.readers[rq.index++]=read_id;//将读者进程加入等待队列
}//else
}//if
else{//rcount !=1 则知道当前已经有读者在读,读读不互斥,则这个读者可以直接进来了读
printf(读者%d正在读\n,read_id);
for(i = 0;i 300;i++){
您可能关注的文档
- 深度:做好珠宝产品研发和市场推广!钻库网.doc
- 实战推销技巧吸尘器篇——用证明来说服您的客户.doc
- 一个管理大师15年的读白.pdf
- QT1130万人放单我37团满城为你护航.pdf
- 法国和俄罗斯市场分析.docx
- 产品设计之道:谁更便利,谁就是赢家.pdf
- 王冉、童士豪、邓华金:牛眼看电商.pdf
- 新电商四部曲,帮你开启电商新路程.pdf
- 关于广告(之一)——广告的本质,就是劝诱(2006-11-13 090938).doc
- 今天的互联网设计师很有“钱途”,如何才能更好地理清自己的发展方向?.pdf
- 2025年金肯职业技术学院单招职业适应性测试题库带答案.docx
- 2025年钦州幼儿师范高等专科学校单招综合素质考试题库完美版.docx
- 2025年钟山职业技术学院单招职业适应性考试题库参考答案.docx
- 2025年金华职业技术学院单招职业技能测试题库附答案.docx
- 2025年闽南理工学院单招职业技能测试题库审定版.docx
- 2025年闽南理工学院单招综合素质考试题库审定版.docx
- 2025年闽南理工学院单招职业倾向性考试题库汇编.docx
- 2025年闽南理工学院单招职业倾向性考试题库推荐.docx
- 2025年闽北职业技术学院单招综合素质考试题库1套.docx
- 2025年长沙轨道交通职业学院单招职业技能考试题库一套.docx
最近下载
- 建筑工程图集 16J914-1:公用建筑卫生间.pdf VIP
- 90后婚礼邀请函 婚礼邀请函制作软件.doc VIP
- 2025年初中升高中英语衔接测试试卷(Word版,含答案).docx VIP
- 2025重大事故隐患判定标准解读(可编辑课件).pptx VIP
- 起重机地面操作安全培训.pptx
- 《造纸行业绿色工厂评价规范》团体标准 征求意见稿.pdf VIP
- XX市XX医院无痛医院建设方案55.docx VIP
- 水源井及配套设施项目(含地下水专项评价)环评环境影响报告表(新版环评).doc VIP
- 译林版八年级英语上册一二单元检测.pdf VIP
- 16bj7-1楼梯平台栏杆及扶手.pdf VIP
文档评论(0)