下载此文档

操作系统第一次实验报告 操作系统临界区问题.doc


文档分类:行业资料 | 页数:约7页 举报非法文档有奖
1/7
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/7 下载此文档
文档列表 文档介绍
操作系统第一次实验报告_操作系统临界区问题操作系统临界区问题一、实验目的本实验讨论临界区问题及其解决方案。实验首先创建两个共享数据资源的并发线程。在没有同步控制机制的情况下,我们将看到某些异常现象。针对观察到的现象,本实验采用两套解决方案:•利用Windows的mutex机制•采用软件方案然后比较这两种方案的性能优劣。二、实验步骤1、***Windows操作系统支持抢先式调度,这意味着一线程运行一段时间后,操作系统会暂停其运行并启动另一线程。也就是说,进程内的所有线程会以不可预知的步调并发执行。为了***,我们首先创建两个线程t1和t2。父线程(主线程)定义两个全局变量,t2。每个变量表示一个银行账户,其值表示该账户的存款余额,初始值为0。线程模拟在两个账户之间进行转账的交易。也即,每个线程首先读取两个账户的余额,然后产生一个随机数r,在其中一个账户上减去该数,在另一个账户上加上该数。代码如下:#include<>#include<>#include<>t1=0;t2=0;doublebegin=0;doubleend=0;doubletime=0;inta=1;//HANDLEhMutex=CreateMutex(NULL,FALSE,NULL);DWORDWINAPIrun(LPVOIDp){intcounter=0;inttmp1,tmp2,r;//WaitForSingleObject(hMutex,INFINITE);begin=GetTickCount();do{ tmp1=t1; tmp2=t2; r=rand(); t1=tmp1+r; t2=tmp2-r; counter++;}while(t1+t2==0&&counter<);end=GetTickCount();time=end-begin;printf("进?程¨¬%d所¨´用®?时º¡À间?为a%lf\n",a,time);a++;//ReleaseMutex(hMutex); counter=0;return0;}intmain(intargc,char*argv[]){ CreateThread(NULL,0,run,NULL,0,NULL); CreateThread(NULL,0,run,NULL,0,NULL); system("PAUSE"); return0;}执行结果如下:从运行结果可以看出,每次进程2都可以全部完成,完成一次计数所需要的时间为62ms,而进城1无法全部完成,所用时间不一定。混乱制造成功。2、解决方案方案一:mutex方案Windows操作系统提供了mutex对象。mutex状态可以signaled(unlocked)或者是nonsignaled(locked)。利用mutex对象,可以方便地实现临界区保护。进入临界区时(在第一个读操作之前),锁住mutex对象;离开临界区时(在第二个写操作之后),打开mutex对象。线程的阻塞与唤醒由系统管理,程序员无需干预。以下给出的是在Windows操作系统下有关mutex对象操作的提示。创建一个未上锁mutex对象的代码如下:#include<>#include<>#include<>t1=0;t2=0;doublebegin=0;double

操作系统第一次实验报告 操作系统临界区问题 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数7
  • 收藏数0 收藏
  • 顶次数0
  • 上传人qiang19840906
  • 文件大小82 KB
  • 时间2020-08-07