发现文章标题:任务3- 同步对象解决临界问题 任务3- 同步对象解决临界问题.doc-免费下载

公文高手,超级方便的公文写作神器! 立即了解


任务3- 同步对象解决临界问题

第一篇:任务3-同步对象解决临界问题1.基本信息

实践题目:同步对象解决临界问题完成人:

班级:07062301姓名:陈杨

学号:0706230101

报告日期:2011年1月5日2.实践内容简要描述

实践目标

1.理解临界区问题

2.学会使用win32所提供的同步对象(事件对象、互斥对象、信号量对象、临界区对象等)以解决临界区问题实践内容

协作线程——兄弟问题设置竞争条件:

定义两个全局变量:accnt1和accnt2,初值都为零;创建两个线程acc1和acc2;(1)获得一个随机数

(2)从accnt1减去这个随机数;(3)将这个随机数加到accnt2中;(4)正确的话,accnt1+accnt2=0;

(5)但在未实现线程互斥的情况下,accnt1+accnt2可能不为0。用临界区对象实现协作线程,以解决以上临界区问题——兄弟问题。设计思路

利用临界区对象(critical_section型),实现线程间的互斥。主要数据结构

typedefstructbrotherinfo{int

miserial;dwordmdwdelay;}brotherinfo,*pbrotherinfo;

volatileintgiaccnt1=0;/*ensurevariableinthememory*/volatileintgiaccnt2=0;critical_sectionmy_section;主要代码结构及分析

//threaddwordwinapibrother(lpvoidlpparam){intiloan,iaccnt,icounter=0;pbrotherinfopthreadinfo;

//getinfofromparampthreadinfo=(pbrotherinfo)lpparam;

srand((unsigned)pthreadinfo->mdwdelay);

do{fprintf(stdout,"iamthread%d,iamdoing%05dthstep\n",pthreadinfo->miserial,icounter);iloan=rand;/*fprintf(stdout,"rand_num=%05d\n",iloan);*///sleep(pthreadinfo->mdwdelay*inte_per_sec);

entercriticalsection(&my_section);//等待进入临界区的授权

//startofcritical_sectiongiaccnt1=giaccnt1-iloan;sleep(pthreadinfo->mdwdelay*inte_per_sec);giaccnt2=giaccnt2+iloan;iaccnt=giaccnt1+giaccnt2;//endofcritical_section

leavecriticalsection(&my_section);//释放对临界区的使用权

icounter++;}while((iaccnt==0)&&(icountersettings—>c/c++标签页—>category:codegenertion—>userun-timelibrary:”,此处一开始我选的是“multithreaded”,而选择“debugmultithreaded”则可避免上述问题实践体会和收获

通过此次实验,我了解了临界区变量的使用方法及作用,并且相较而言,使用临界区变量比用软件方法解决兄弟问题要简单。在第二个任务的基础上,此次任务并没有花费太多的时间就得以完成。


(未完,全文共9337字,当前显示1497字)

(请认真阅读下面的提示信息)


温馨提示

此文章为6点公文网原创,稍加修改便可使用。只有正式会员才能完整阅读,请理解!

会员不仅可以阅读完整文章,而且可以下载WORD版文件

已经注册:立即登录>>

尚未注册:立即注册>>

6点公文网 ,让我们一起6点下班!