下载此文档

进程同步(生产者与消费者).pdf


文档分类:经济/贸易/财会 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
该【进程同步(生产者与消费者) 】是由【青山代下】上传分享,文档一共【6】页,该文档可以免费在线阅读,需要了解更多关于【进程同步(生产者与消费者) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..件学院操作系统实验报告业:软件工程班级:RB软工互152学号:201560160226学生姓名:王泽华指导教师:韩新超/6:..:进程同步(生产者与消费者))理解进程竞争资源的现象,进而理解进程的同步于互斥;2)掌握基本的互斥与同步算法,进一步理解“生产者—消费者”模型;3)通过对“生产者—消费者”问题编程实现,了解进程创建、同步信号量、互斥信号量、临界区的创建和使用,初步了解并发程序设计方法;4)进一步理解P、V原语和信号量在线程互斥和同步机制中的运用。。、该实验中使用到相关的windowsAPI函数:1)createThread建立新的线程;2)createMutex创建一个互斥体;3)createSemaphore创建一个新的信号量;4)releaseMutex释放由线程拥有的一个互斥体;5)releaseSemaphore对指定的信号量增加指定的值;6)waitforSingleObject用来检测handle时间的信号状态;7)waitforMultipleObjectstrue即等待所有信号量有效再往下执行,false当其中一个信号量有效时向下执行;8)CloseHandle关闭一个内核对象。2、数据结构用实验一中的进程就绪队列,并在此基础上进行调度,如果队列排序与算法要求不一致则编写一个排序函数。3、进程调度算法:选择一种进程调度算法实现。4、主界面设计:在实验一的界面上增加一个进程调度按钮、被调进程的PCB显示。5、功能测试:从显示出的就绪队列状态和被调进程的PCB,查看操作的正确与否。:..(2)结果分析:①在每个过程中先做,后做V(mutex),二者要成对出现。夹在二者中间的代码段就是该进程的临界区。②对同步信号量full和empty的P,V操作同样必须成对出现,但它们分别位于不同的程序中。③无论在生产者进程中还是在消费者进程中,两个P操作的次序不能颠倒:应先执行同步信号量的P操作,然后执行互斥信号量的P操作。否则可能造成进程死锁。,极大的改善了系统资源的利用率和提高了系统的吞吐量,但是由于多道环境中同时存在多个进程,它们共享系统资源,各自按/6:..照各自的方式执行,给系统造成了混乱,所以系统必须提供一种机制管理进程,使这些并发执行的进程之间能有条不紊地运行,能有效地共享资源和相互合作,使得程序的执行具有可再现性,这就是进程同步的主要任务。#include<iostream>#include<>#include<>usingnamespacestd;//生产者消费者问题,单个生产者,多个消费者,多个缓冲池//使用信号量和关键段来实现usingnamespacestd;intgi,gj;constintnum=10;//产生数据的个数constintsize=4;//缓冲池的大小volatileboolflag=true;//用于消费者线程之间intbuf[size];//缓冲池CRITICAL_SECTIONgc;//关键段HANDLEempty,full;//Semaphoreunsignedint__stdcallpro(PVOIDp)//生产者线程{for(inti=0;i<=num;i++){WaitForSingleObject(empty,INFINITE);//线程同步EnterCriticalSection(&gc);//线程互斥buf[gi]=i;生产者在号缓冲池放入gi=(gi+1)%size;LeaveCriticalSection(&gc);/6:..ReleaseSemaphore(full,1,NULL);}生产者运行结束return0;}unsignedint__stdcallcus(PVOIDp)//消费者线程{while(true){WaitForSingleObject(full,INFINITE);//线程同步if(flag==false)//线程之间的逻辑判断{break;}EnterCriticalSection(&gc);//线程互斥线程在缓冲池获取数据endl;if(buf[gj]==num)//结束条件{LeaveCriticalSection(&gc);ReleaseSemaphore(full,1,NULL);flag=false;break;}gj=(gj+1)%size;LeaveCriticalSection(&gc);Sleep(50);ReleaseSemaphore(empty,1,NULL);}/6:..消费者线程运行结束return0;}intmain(){//相关变量的定义constintsz=3;gi=gj=0;InitializeCriticalSection(&gc);empty=CreateSemaphore(NULL,4,4,NULL);full=CreateSemaphore(NULL,0,4,NULL);HANDLEhand[sz];hand[0]=(HANDLE)_beginthreadex(NULL,0,pro,NULL,0,NULL);//创建了三个线程hand[1]=(HANDLE)_beginthreadex(NULL,0,cus,NULL,0,NULL);hand[2]=(HANDLE)_beginthreadex(NULL,0,cus,NULL,0,NULL);WaitForMultipleObjects(sz,hand,true,INFINITE);//资源的释放CloseHandle(full);CloseHandle(empty);DeleteCriticalSection(&gc);for(inti=0;i<sz;i++){CloseHandle(hand[i]);}return0;}/6

进程同步(生产者与消费者) 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人青山代下
  • 文件大小626 KB
  • 时间2024-04-14