




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《进程同步与互斥》试验汇报试验序号:01试验项目名称:进程同步与互斥试验地点指导教师时间1、掌握基本的进程同步与互斥算法,理解生产者-消费者问题。2、学习使用Windows/XP中基本的同步对象,掌握有关API的使用措施。3、理解Windows/XP中多线程的并发执行机制,实现进程的同步与互斥。4、设计程序,实现生产者-消费者进程(线程)的同步与互斥;Windows/XP+VisualC++以生产者-消费者模型为根据,在Windows/XP环境下创立一种控制台进程,在该进程中创立n个线程模拟生产者和消费者,实现进程(线程)的同步与互斥。生产者进程的功能:生产东西,供消费者消费;消费者进程的功能:消费生产者生产的东西。生产者生产产品并存入缓冲区供消费者取走使用,消费者从缓冲器内取出产品去消费。在生产者和消费者同步工作时,必须严禁生产者将产品放入已装满的缓冲器//定义某些常量;//本程序容许的最大临界区数;//秒到微秒的乘法因子;//本程序容许的生产和消费线程的总数;#defineMAX_THREAD_NU//定义一种构造,记录在测试文献中指定{intthread_request[M//临界区对象的申明,用于管理缓冲区的互斥访问;CRITICAL_SECTIONPC_Critical[MAX_BUFFER_NUM];intBuffer_Critical[MAX_BUFFER_NUM];//缓冲区申明,用于寄存产品;HANDLEh_Thread[MAX_THREAD_NUM];//用于存储每个线程句柄的数组;ThreadInfoThread_Info[MAX_THREA//线程信息数组;//一种信号量;//一种互斥量;//实际的线程的数目;{//申明所需变量;//初始化缓冲区;for(inti=0;i<MAX_BUFFER_NUM;i++)//初始化每个线程的祈求队列;for(intj=0;j<MAX_THREAD_NUM;j++){for(intk=0;k<MAX_THREAD_NUM;k++)Thread_Info[j].thread_reqThread_Info[j].n_request//初始化临界区;for(i=0;i<MAX_BUFFER_NUM;i++)//打开输入文献,按照规定的格式提取线程等信息;//从文献中获得实际的缓冲区的数目;printf("输入文献是:\n");//回显获得的缓冲区的数目信息;//提取每个线程的信息到对应数据构造中;while(c!='\n'&&!in()Thread_Info[n_Thread].thread_request[Thread_Info[n_Thread].n_req}//回显获得的线程信息,便于确认对的性;intTemp_request=Thread_Info[j].n_request;for(intk=0;k<Temp_requesprintf("%d",Thread_Info[j].thread_request[k]empty_semaphore=CreateSemaphore(NULL,n_Buffer_or_Critical,h_mutex=CreateMutex(NULL,FALSE,"mutex_for_ustd::stringlp="semaphore_for_produce_";h_Semaphore[j+1]=CreateSemaphore(NULL,0,n_Thread,lp.cif(Thread_Info[i].entity=='P')h_Thread[i]=CreateThread(NULL,0,(Lwait_for_all=WaitForMultipleObjects(n_Thread,h_Thread,TRUE,-1);printf("\n\nALLProducerandconsumerhavefinishedtheprintf("Pressanykey_getch();boolIfInOtherRequest(intr{for(intj=0;j<Thread_Info[i].n_request;j++)if(Thread_Info[i].thread_reque//找出目前可以进行产品生产的空缓冲区位置;for(inti=0;i<n_Buffer_or_Crit//用下面这个特殊值表达本缓冲区正处在被写状态;returnEmptyPosition;//找出目前所需生产者生产的产品的位置;{if(Buffer_Critical[}}//生产者进程DWORDwait_for_semaphore,wait_for_mutm_serial=((ThreadInfo*)(p))->serial;m_delay=(DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);printf("Producer%2dsendstheproducerequire.\n",m_serial);//确认有空缓冲区可供生产,同步将空位置数empty减1;用于生产者和消费者的同步;wait_for_semaphore=WaitForSingleObject(empty_semaphore,-1);wait_for_mutex=WaitForSingleObject(h_mutexintProducePos=FindProducePosition();//关键生产环节中,程序将生产者的ID作为产品编号放入,以便消费者识别;printf("Producer%2position%2d.\n",m_serial,PBuffer_Critical[ProducePos]=mprintf("Producer%2dfinishproducing:\n",m_serial);printf("position[%2d]:%3d\n",ProducePos,Buffer_Critical[ProducePos]);ReleaseSemaphore(h_Semaphore[m_serial],n_Thr}voidConsume(void*p){DWORDwait_for_semaphore,m_dm_serial=((ThreadInfo*)(pm_delay=(DWORD)(((ThreadInfo*)(p))->delay*INTE_PER_SEC);m_requestNum=((ThreadInfo*)m_thread_request[i]=((ThreadInfo*)(p))->thread_requfor(i=0;i<m_requestNum;i++){//祈求消费下一种产品product\n",m_serial,m_thread_request[//假如对应生产者没有生产,则等待;假如生产了,容许的消费者数目-1;实现了读wait_for_semaphore=WaitForSingleObject(h_Semaphore[m_thread_requestintBufferPos=FindBufferPosition(m_thread_request[i]);//进入临界区后执行消费动作;并在完毕本次祈求后,告知此外//经满足;同步假如对应的产品使用完毕,就做对应处理;并给//示;该对应处理指将对应缓冲区清空,并增长代表空缓冲区的信号量;EnterCriticalSection(&PC_Critical[Buffeprintf("Consumer%2dbegintoconsume%2dif(!IfInOtherRequesBuffer_Critical[BufferPos]=-1;//标识缓冲区为空;\n",BufferPos,Buffer_CritReleaseSemaphore(empty_semaphore,}printf("Consumer%2dfinishconsumingpr}LeaveCriticalSection(&PC_Critical[Buff渝入文件是:D:大二下课件操作系统原理\实险现作系统实threadthread2P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 艺术设计概论
- 人教版词汇说课课件
- 冬季卫生保健知识
- 早搏患者中医案例分享
- 看电视的卫生管理规范
- 2025年环保产业技术创新与产业升级绿色国际合作研究报告
- 学校传染病课件
- 2025年财富管理行业金融科技应用前景与客户满意度报告
- 活着书籍装帧设计调研
- 糖尿病患者的健康教育
- GA/T 737-2011保安服务监管信息基本数据项
- 低龄儿童龋的临床管理专家共识
- 公共机构节能量保证型、能用费用托管型合同能源管理项目合同文本模板示例
- 普鲁士蓝类正极材料未来可期
- 智能吓数纸培训手册
- 未带有效居民身份证考生承诺书
- 原子分光光度法测定水中重金属镉的含量
- 学生实习安全及突发事件应急预案
- 新教材高一必修下册《游园》教案
- DIN1783厚度在0.35mm以上冷轧的铝及铝塑性合金带材和板材、尺寸
- 低风险FOF产品方案设计目标最大回撤3%以内的投资策略
评论
0/150
提交评论