操作系统生产者与消费者专业课程设计.doc
《操作系统生产者与消费者专业课程设计.doc》由会员分享,可在线阅读,更多相关《操作系统生产者与消费者专业课程设计.doc(19页珍藏版)》请在咨信网上搜索。
1、操作系统课程设计生产者和消费者问题系 院:计算机科学系学生姓名:吴伟学 号:专 业:软件工程年 级:0701B完毕日期:11月指引教师:刘栓一、课程设计性质与任务1、生产者-消费者问题是很典型很具备代表性进程同步问题,计算机中诸多同步问题都可抽象为生产者-消费者问题,通过本实验练习,但愿能加深学生对进程同步问题结识与理解。2、熟悉VC使用,培养和提高学生分析问题、解决问题能力。二、课程设计内容及其规定1 实验内容以生产者/消费者模型为根据,在Windows 环境下创立一种控制台进程,在该进程中创立n个线程模仿生产者和消费者,实现进程(线程)同步与互斥。2 实验规定l 学习并理解生产者/消费者模
2、型及其同步/互斥规则;l 学习理解Windows同步对象及其特性;l 熟悉实验环境,掌握有关API用法;l 设计程序,实现生产者/消费者进程(线程)同步与互斥;l 提交实验报告。三、课程设计时间安排课程设计时间 8学时四、课程设计实验环境本实验是在winxpVC6.0环境下实现,运用Windows SDK编制实例程序。因此实验需要在windows下安装VC后进行。VC是一种集成开发环境,其中包括了Windows SDK所有工具和定义;因此安装了VC后就不用特意安装SDK了。五、正文1、 实验程序构造图(流程图);开始ProduceWait BufferWait ProductsConsume结
3、束While produceWhile consume2、数据构造及信号量定义阐明;(1) CreateThreadl 功能创立一种在调用进程地址空间中执行线程l 格式HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParamiter,DWORD dwCreationFlags,Lpdword lpThread );l 参数阐明lpThreadAttributes指向一种LPSECURITY
4、_ATTRIBUTES(新线程安全性描述符)。dwStackSize定义原始堆栈大小。lpStartAddress指向使用LPTHRAED_START_ROUTINE类型定义函数。lpParamiter定义一种给进程传递参数指针。dwCreationFlags定义控制线程创立附加标志。lpThread保存线程标志符(32位)(2) CreateMutexl 功能创立一种命名或匿名互斥量对象l 格式HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,BOOL bInitialOwner,LPCTSTR lpName);l 参数阐明
5、lpMutexAttributes必要取值NULL。bInitialOwner批示当前线程与否立即拥有该互斥量(即立即加锁)。lpName互斥量名称。(3) CreateSemaphorel 功能创立一种命名或匿名信号量对象l 格式HANDLE CreateSemaphore(LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName );l 参数阐明lpSemaphoreAttributes必要取值NULL。lInitialCount信号量初始值。该值不
6、不大于0,但不大于lMaximumCount指定最大值。lMaximumCount信号量最大值。lpName信号量名称。(4) WaitForSingleObjectl 功能使程序处在等待状态,直到信号量hHandle浮现(即其值不不大于等于1)或超过规定等待时间l 格式DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);l 参数阐明hHandle信号量指针。dwMilliseconds等待最长时间(INFINITE为无限等待)。(5) ReleaseSemaphorel 功能对指定信号量加上一种指定大小量。成功执行则返
7、回非0值l 格式BOOL ReleaseSemaphore(HANDLE hSemaphore,LONG lReleaseCount,LPLONG lppreviousCount );l 参数阐明hSemaphore信号量指针。lReleaseCount信号量增量。lppreviousCount保存信号量当前值。(6) ReleaseMutexl 功能打开互斥锁,即把互斥量加1。成功调用则返回0l 格式BOOL ReleaseMutex(HANDLE hMutex);l 参数阐明hMutex互斥量指针。(7) InitializeCriticalSectionl 功能初始化临界区对象l 格式V
8、OID InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection);l 参数阐明lpCriticalSection指向临界区对象指针。(8) EnterCriticalSectionl 功能等待指定临界区对象所有权l 格式VOID enterCriticalSection(LPCRITICAL_SECTION lpCriticalSection);l 参数阐明lpCriticalSection指向临界区对象指针。(9) LeaveCriticalSectionl 功能释放指定临界区对象所有权l 格式VOID LeaveCrit
9、icalSection(LPCRITICAL_SECTION lpCriticalSection);l 参数阐明lpCriticalSection指向临界区对象指针。3、实验环节;(1) 打开VC,选取菜单项file-new,选取projects选项卡并建立一种名为 R_WP1win32 console applicatoin工程;创立时注意指定创立该工程目录;(2) 在工程中创立源文献 R_WP1.cpp:选取菜单项project-add to project-files,在选取框中输入自己想要创立文献名,这里是 R_WP1.cpp;在接下来询问与否创立新文献时回答yes;然后通过Works
10、pace-FileView-Source Files打开该文献,在其中编辑源文献并保存.(3) 通过调用菜单命令项build-build all进行编译连接,可以在指定工程目录下得到debug- R_WP1.exe程序,然后把给定test.txt文献存入该debug目录下,就可以在控制台进入该debug目录运营程序了。需要强调是在创立数据文献时,由于涉及到文献格式问题,最佳在记事本中手工逐个输入数据,而不要拷贝粘贴数据。4、重要算法创立生产者和消费者线程for(i =0;iserial;m_delay = (DWORD)(ThreadInfo*)(p)-delay *INTE_PER_SEC)
11、;Sleep(m_delay);/开始祈求生产printf(Producer %2d sends the produce require.n,m_serial);/确认有空缓冲区可供生产,同步将空位置数empty减1;用于生产者和消费者同步;wait_for_semaphore= WaitForSingleObject(empty_semaphore,-1);/互斥访问下一种可用于生产空临界区,实现写写互斥;wait_for_mutex = WaitForSingleObject(h_mutex,-1);int ProducePos = FindProducePosition(); Relea
12、seMutex(h_mutex);/生产者在获得自己空位置并做上标记后,如下写操作在生产者之间可以并发;/核心生产环节中,程序将生产者ID作为产品编号放入,以便消费者辨认;printf(Producer %2d begin to produce at position %2d.n,m_serial,ProducePos);Buffer_CriticalProducePos = m_serial;printf(Producer %2d finish producing :n ,m_serial);printf( position %2d :%3d n ,ProducePos,Buffer_Cri
13、ticalProducePos);/使生产者写缓冲区可以被各种消费者使用,实现读写同步;ReleaseSemaphore(h_Semaphorem_serial,n_Thread,NULL);消费者进程void Consume(void * p)/局部变量声明;DWORDwait_for_semaphore,m_delay;intm_serial,m_requestNum; /消费者序列号和祈求数目;intm_thread_requestMAX_THREAD_NUM;/本消费线程祈求队列; /提取本线程信息到本地;m_serial = (ThreadInfo*)(p)-serial;m_del
14、ay = (DWORD)(ThreadInfo*)(p)-delay *INTE_PER_SEC);m_requestNum = (ThreadInfo *)(p)-n_request;for (int i = 0;ithread_requesti;Sleep(m_delay);/循环进行所需产品消费for(i =0;ithread_requesti =-1; if(!IfInOtherRequest(m_thread_requesti)Buffer_CriticalBufferPos = -1; /标记缓冲区为空;printf(Consumer%2d finish consuming %2d
15、:n ,m_serial,m_thread_requesti);printf( position %2d :%3d n ,BufferPos,Buffer_CriticalBufferPos);ReleaseSemaphore(empty_semaphore,1,NULL); elseprintf(Consumer %2d finish consuming product %2dn ,m_serial,m_thread_requesti); /离开临界区 LeaveCriticalSection(&PC_CriticalBufferPos); 5、实验运营图;6、实验成果分析;只有在生产者生产
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 生产者 消费者 专业课程 设计
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。