第3章 部分习题答案

第3章 部分习题答案

ID:15265405

大小:45.50 KB

页数:6页

时间:2018-08-02

第3章 部分习题答案_第1页
第3章 部分习题答案_第2页
第3章 部分习题答案_第3页
第3章 部分习题答案_第4页
第3章 部分习题答案_第5页
资源描述:

《第3章 部分习题答案》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第3章部分习题答案3.2.为什么进程在进入临界区之前,应先执行"进入区"代码,在退出临界区后又执行"退出区"代码?为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问的临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问,并设置正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码成为"进入区"代码;在退出临界区后,必须执行"退出区"代码,用于恢复未被访问标志.3.3同步机构应遵循哪些基本准则?为什么?a.空闲让进.b.忙则等待.c.有限等待.d.让权等待.3.6你认为整型信号量机

2、制和记录型信号量机制,是否完全遵循了同步机构的四条准则?a.在整型信号量机制中,未遵循"让权等待"的准则.b.记录型信号量机制完全遵循了同步机构的"空闲让进,忙则等待,有限等待,让权等待"四条准则.3.9在生产者-消费者问题中,如果缺少了signal(full)或signal(empty),对执行结果会有何影响?生产者-消费者问题可描述如下:varmutex,empty,full:semaphore:=1,n,0;buffer:array[0,...,n-1]ofitem;in,out:integer:=0,0;beginparbeginpro

3、ducer:beginrepeat..produceaniteminnextp;..wait(empty);wait(mutex);buffer(in):=nextp;in:=(in+1)modn;signal(mutex);/****************/signal(full);/****************/untilfalse;endconsumer:beginrepeatwait(full);wait(mutex);nextc:=buffer(out);out:=(out+1)modn;signal(mutex);/*****

4、***********/signal(empty);/****************/consumetheiteminnextc;untilfalse;endparendend可见,生产者可以不断地往缓冲池送消息,如果缓冲池满,就会覆盖原有数据,造成数据混乱.而消费者始终因wait(full)操作将消费进程直接送入进程链表进行等待,无法访问缓冲池,造成无限等待.3.10在生产者-消费者问题中,如果将两个wait操作即wait(full)和wait(mutex)互换位置;或者是将signal(mutex)与signal(full)互换位置结果会

5、如何?varmutex,empty,full:semaphore:=1,n,0;buffer:array[0,...,n-1]ofitem;in,out:integer:=0,0;beginparbeginproducer:beginrepeat..produceaniteminnextp;..wait(empty);wait(mutex);buffer(in):=nextp;in:=(in+1)modn;/*******************/signal(full);signal(mutex);/*******************/u

6、ntilfalse;endconsumer:beginrepeat/******************/wait(mutex);wait(full);/******************/nextc:=buffer(out);out:=(out+1)modn;signal(mutex);signal(empty);consumetheiteminnextc;untilfalse;endparendendwait(full)和wait(mutex)互换位置后,因为mutex在这儿是全局变量,执行完wait(mutex),则mutex赋值为0,

7、倘若full也为0,则该生产者进程就会转入进程链表进行等待,而生产者进程会因全局变量mutex为0而进行等待,使full始终为0,这样就形成了死锁.而signal(mutex)与signal(full)互换位置后,从逻辑上来说应该是一样的.3.11我们为某临界区设置一把锁W,当W=1时,表示关锁;W=0时,表示锁已打开.试写出开锁原语和关锁原语,并利用它们去实现互斥.开锁原语:unlock(W):W=0;关锁原语:lock(W);if(W==1)dono_op;W=1;利用开关锁原语实现互斥:varW:semaphore:=0;beginpar

8、beginprocess:beginrepeatlock(W);criticalsectionunlock(W);remaindersectionun

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。