- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4 章 进程同步与死锁
(1) 什么是进程同步?什么是进程互斥?
解:
同步是进程间的直接制约关系,这种制约主要源于进程间的合作。进程同步的主要任务
就是使并发执行的各进程之间能有效地共享资源和相互合作,从而在执行时间、次序上相互
制约,按照一定的协议协调执行,使程序的执行具有可再现性。
进程互斥是进程间的间接制约关系,当多个进程需要使用相同的资源,而此类资源在任
一时刻却只能供一个进程使用,获得资源的进程可以继续执行,没有获得资源的进程必须等
待,进程的运行具有时间次序的特征,谁先从系统获得共享资源,谁就先运行,这种对共享
资源的排它性使用所造成的进程间的间接制约关系称为进程互斥。互斥是一种特殊的同步方
式。
(2) 进程执行时为什么要设置进入区和退出区?
解:
为了实现多个进程对临界资源的互斥访问,必须在临界区前面增加一段用于检查欲访问
的临界资源是否正被访问的代码,如果未被访问,该进程便可进入临界区对资源进行访问,
并设置正被访问标志,如果正被访问,则本进程不能进入临界区,实现这一功能的代码成为
“进入区”代码;在退出临界区后,必须执行“退出区”代码,用于恢复未被访问标志。
(3) 同步机构需要遵循的基本准则是什么?请简要说明。
解:
同步机制都应遵循下面的4 条准则:
1. 空闲让进。当无进程处于临界区时,允许进程进入临界区,并且只能在临界区运行
有限的时间。
2. 忙则等待。当有一个进程在临界区时,其它欲进入临界区的进程必须等待,以保证
进程互斥地访问临界资源。
3. 有限等待。对要求访问临界资源的进程,应保证进程能在有限时间内进入临界区,
以免陷入“饥饿”状态。
4. 让权等待。当进程不能进入临界区时,应立即放弃占用 CPU,以使其它进程有机
会得到 CPU 的使用权,以免陷入“饥饿”状态。
(4) 整型信号量是否能完全遵循同步机构的四条基本准则?为什么?
解:
不能。在整型信号量机制中,未遵循“让权等待”的准则。
(5) 在生产者-消费者问题中,若缺少了 V(full)或 V(empty) ,对进程的执行有什么影响?
解:
如果缺少了 V(full) ,那么表明从第一个生产者进程开始就没有对信号量 full 值改变,即
使缓冲池存放的产品已满了,但 full 的值还是 0,这样消费者进程在执行 P(full) 时会认为缓
冲池是空的而取不到产品,那么消费者进程则会一直处于等待状态。
如果缺少了 V(empty) ,例如在生产者进程向 n 个缓冲区放满产品后消费者进程才开始
从中取产品,这时 empty=0,full=n,那么每当消费者进程取走一个产品时 empty 并没有被
改变,直到缓冲池中的产品都取走了,empty 的值也一直是 0,即使目前缓冲池有n 个空缓
冲区,生产者进程要想再往缓冲池中投放产品会因申请不到空缓冲区而被阻塞。
(6) 在生产者-消费者问题中,若将 P(full)和 P(empty)交换位置,或将 V(full)或 V(empty)交换
位置,对进程执行有什么影响?
解:
对 full 和 empty 信号量的 P 、V 操作应分别出现在合作进程中,这样做的目的是能正确
表征各进程对临界资源的使用情况,保证正确的进程通信联络。
(7) 利用信号量写出不会出现死锁的哲学家进餐问题的算法。
解:
对哲学家按顺序从 0 到 4 编号,哲学家 i 左边的筷子的编号为 i,哲学家右边的筷子的
编号为(i+1 )%5 。
semaphore chopstick[5]={1};
//定义信号量数组 chopstick[5],由于侉子是临街资源(互斥),故设置初值均为 1。
Pi(){
//i 号哲学家的进程
do{
if(i(i+1)%5)
{
wait(chopstick[i]);
wait(chopstick[(i+1)%5]);
}
else
{
wait(chopstick[(i+1)%5]);
wait(chopst
原创力文档


文档评论(0)