欲设计一个分时售票系统,各个终端共用票号单元x,

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

欲设计一个分时售票系统,各个终端共用票号单元x,执行卖票程序send(x)。为了互斥地卖票,设置一个变量gate,卖票者将它置0,以便将其它终端进程堵在卖票程序之外。各个终端进程使用下列程序段:while(gate==0);//查看别人在卖票就踏步等待gate=0;//一旦别人买完退出,便关上门//准备卖票send(x);//卖票gate=1;//卖完票后开门,准备让//别人卖试问上述程序结构是否存在与时间有关的错误?这个程序可能产生与时间有关的错误。比如如果当前gate的值为1,门是开的。进程A在考察了gate的值后,在执行“gate=0;”之前它的时间片到期了,发生了时间片到期中断。此时gate的值仍为1,进程B可以进入卖票。很可能在它卖票的同时,被中断的进程A再次被调度运行,导致进程A与B同时卖票的混乱局面。有一阅览室,读者进入时必须先在一张登记表上进行登记,该表为每一座位列一表目,包括座号和读者姓名。读者离开时要消掉登记信号,阅览室中共有100个座位,请用类Pascal语言和Wait,Signal操作写出这些进程间的同步算法S1=100(有100个座位)S2=0(有没阅读者)mutex=1while(1){P(S1);P(mutex);登记信息;V(muetx);V(S2)就座,阅读;}while(1){P(S2);P(mutex);消掉信息;V(muetx);V(S1);离开阅览室;}司机与售票员协调问题1)只有售票员把车门关好,司机才能开车,从而售票员关门应通知司机开车;2)只有汽车已停下,售票员才能开门让乘客上下,从而司机停车后应通知售票员s1:车门是否关上,0表示未关,初始值为0s2:车是否已停止,0为正在行进,初始值为1同步的进程司机进程售票员进程While(1){while(1){P(s1);P(s2);开车行进;开门上下客;到站停车;关车门;V(s2);}V(s1);}吸烟者问题smoker2smoker1smoker2Wait(s1);卷烟;抽烟;Signal(done);Wait(s2);卷烟;抽烟;Signal(done);Wait(s3);卷烟;抽烟;Signal(done);agentDo{Wait(done);放置××;If()Signal(s1);If()Signal(s2);If();Signal(s3);}while(1);TheReadersandWritersProblem•Readerfirstsolution.•Writerfirstsolution.wait(mutex);readcount++;if(readcount==1)wait(wrt);signal(mutex);…readingisperformed…wait(mutex);readcount--;if(readcount==0)signal(wrt);signal(mutex);wait(wrt);…writingisperformed…signal(wrt);2.第二类读者写者问题:写者优先条件:1)多个读者可以同时进行读2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)Semaphorerwmutex=1,rmutex=10;//假定容许10个读者读者进程:beginWait(rwmutex);//读者写者互斥Wait(rmutex);Signal(rwmutex);//容许其他读写者访问资源读数据;Signal(rmutex);End写者进程:beginWait(rwmutex);For(intI=1;I=10;I++)wait(rmutex);//禁止新读者,并等待写更新;For(intI=1;I=10;I++)signal(rmutex);//恢复读者资源10Signal(rwmutex);end解法二:读者数未知;设置三个信号量:rwmutex用于写者和其他读者以及写者间互斥访问rmutex用于读者互斥访问intreadcountnrmutex用于写者等待已进入读者退出,所有读者退出前互斥写操作semaphorerwmutex,rmutex,nrmutex;intreadcount=0;rwmutex1=1;rmutex=1;nrmutex=1;写者进程:BeginWait(rwmutex);//互斥后续读者、写者Wait(nrmutex);//如果有读者正在读,等待它写更新;Signal(nrmutex);//容许后续新读者进入后互斥写操作Signal(rwmutex);//容许后续新读者、写者end假定有3个并发进程P、Q、R,其中R负责从输入设备上读入信息并传送给Q,Q将信息加工后传送给P,P则负责把信息打印出去。假定R与Q共享一个缓冲区,Q与P则共享另一缓冲区。试用P、V操作写出P、Q、R这3个进程的同步算法。设信号量S1,代表BUF1是否为空,其值为1表示为空,为0表示不空,初值为1。又设信号量S2代表BUF1是否有信号,其值为1表示有信号,为0表示无信号,初值为0。设信号量S3,代表BUF2是否为空,其值为1表示为空,为0表示不空,初值为1。又设信号量S4代表BUF2是否有信号,其值为1表示有信号,为0表示无信号,初值为0。R进程Q进程P进程LR:LQ:LP:P(S1)P(S2)P(S4)输入信息到BUF1P(S3)打印BUF2信息V(S2)拷贝BUF1→BUF2V(S3)GOTOLRV(S1)GOTOLPV(S4)GOTOLQ

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功