全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二:编程实现经典互斥和同步问题1实验目的:加深对信号量、PV操作、进程同步和互斥等概念的理解,掌握PV操作的具体实现方法,熟练掌握进程同步和互斥的实现办法,能利用信号量机制解决实际生活中的同步和互斥问题。2实验内容(1)、编程实现P操作原语、V操作原语,(2)、用所定义的PV操作解决下面的问题:设学院某教室共有座位30个,任何时刻最多可容纳30名同学进入自习,当教室内人数少于30名时,则教室外等待的同学可立即进入,否则需在外面等待。把一个欲进入教室自习的同学看作一个进程。3、实验具体内容和步骤的说明 (1)用户进程的定义(2)信号量的定义及初始化(3)PV操作的定义P操作顺序执行下述两个动作:信号量的值减1,即S=S-1;如果S0,则该进程继续执行(挂入就绪队列);如果S0,则把该进程的状态置为阻塞态,把相应的PCB连入该信号量队列的末尾,并放弃处理机,进行等待(直至其它进程在S上执行V操作,把它释放出来为止)。(挂入阻塞队列)V操作顺序执行下述两个动作:S值加1,即S=S+1;如果S0,则该进程继续运行;(直接挂入就绪队列)如果S0,则释放信号量队列上的第一个PCB(即信号量指针项所指向的PCB)所对应的进程(把阻塞态改为就绪态),执行V操作的进程继续运行。从阻塞队列唤醒一个进程,即从阻塞队列删除,挂入就绪队列(4)写出对应的主函数,解决多名同学之间的同步问题提示:设置2个进程队列,一是已经进入教室的,即就绪队列 二是等待进入教室的,即阻塞队列程序:#include #include typedef struct node int name; /进程IDchar state;/进程状态struct node *next; PCB; int s=3;/资源数PCB *stophead=NULL,*stoptail=NULL,*readyhead=NULL,*readytail=NULL;/阻塞 就绪队列头尾指针void block(PCB *q)/无资源 尾插入阻塞队列 q-state=B; if(stophead=NULL) stophead=q; stoptail=q; else stoptail-next=q; stoptail=q; void wakeup()/唤醒阻塞队列头节点 尾插入就绪队列stophead-state=R;if(readyhead=NULL) readyhead=stophead;readytail=stophead;stophead=stophead-next;readytail-next=NULL; else readytail-next=stophead;readytail=stophead;stophead=stophead-next;readytail-next=NULL; void p(PCB *q)/p操作s=s-1;if(sstate=R;if(readyhead=NULL)readyhead=q;readytail=q;elsereadytail-next=q;readytail=q; int v(int b)/v操作PCB *q,*pre;if(readyhead=NULL)/无就绪进程 返回printf( 无就绪进程!nn);return 0;pre=readyhead;q=readyhead;while(q-name!=b)/寻找就绪队列中v操作节点if(q-next=NULL)/无当前查找节点printf( 查无此就绪进程!nn);return 1;pre=q;q=q-next;/查找成功if(readyhead=readytail)/就绪队列仅有一个节点readyhead=readytail=NULL;free(q);s=s+1; return 0;else/就绪队列有多个节点if(q=readyhead)readyhead=readyhead-next;free(q);/释放节点else if(q=readytail)readytail=pre;pre-next=NULL;free(q);elsepre-next=q-next;free(q);s=s+1; if(sname,q-state);q=q-next;q=stophead;while(q!=NULL)printf(%5d%5cn,q-name,q-state);q=q-next;void main(void)PCB *q;char a;int b;printf(n剩余资源数%d ,s);printf(PLEASE INPUT:);scanf(%c %d,&a,&b);getchar();/输入当前 操作类型 进程ID ( 如 p 1)while(a!=0)/ (0 0) 退出if(a=p)/执行p操作q=(PCB *)malloc(sizeof(PCB);/进程初始化q-name=b;q-next=NULL;p(q);else if(a=v)/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肝硬化诊疗指南(2025版)
- 医院污水污染突发事件应急预案演练脚本
- 2025年中储粮油脂公司招聘检验专业考试题完整答案
- 办公耗材使用管控年度总结及节约方案
- 2025年成都市新初一新生入学分班考试语文试卷及答案
- 2025年安防行业监控中心值班员系统故障排查手册
- 民宿冬季防寒与取暖安全管理手册
- 农产品质量安全与病虫害防治手册
- 高速公路隧道初期支护施工方案
- 2025-2026年健康知识竞赛试卷
- 肺动脉高压诊疗指南(2025版)
- 2027年中考英语【阅读理解】满分答题技巧
- 贵州省粮食储备集团有限公司招聘考试真题
- 部编版新教材道德与法治五年级上册第2课《探索中国革命道路》教学设计
- 四年级上数学学困生转化计划
- 2026国企中层干部竞岗笔试真题题库及标准答案(竞聘专用完整版)
- 1.【川教版】《生命 生态 安全》三年级上册 全册课件
- 行政伦理学教程(第四版)课件 第1章 行政伦理的基本观念
- 矿井通风与安全-金属非金属矿山
- 软件著作权合作协议
- 汽车工程系汽车构造教案
评论
0/150
提交评论