首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一路面试题目,请进

2013-09-09 
一道面试题目,请进线程A和B,抢夺资源C和D,请给出一个发生死锁的例子,以及如何预防死锁的典型方案,再者,如

一道面试题目,请进
线程A和B,抢夺资源C和D,请给出一个发生死锁的例子,以及如何预防死锁的典型方案,再者,如何应用这个方案到实际中

分就这么多了,谢谢各位!

个人举一个丑陋的例子,不要见笑

C和D资源都作加锁操作

A抢到C资源, 通过要利用D资源,才能完成C操作,并对C解锁
B抢到D资源,  通过A抢到C资源后作某一操作,才能对D 进行 解锁
产生死锁

解决:
 将C和D同时当着一个资源来加锁解锁,当然还有多它方法,看你具体c和D的资源和对其操作方式


[解决办法]
这里给你一个最简单的办法克服死锁:
抢占资源必须有顺序,就是说A和B抢占CD的时候,必须先抢占C,完事后释放C才能抢占D,这样就不会死锁。
[解决办法]
A: require C, then require D
B: require D, then require C

当A得到C,B得到D后,死锁了。 

方案1: 
A: require C, then require D
B: require C, then require D

方案2: CD看做以整体
A: require C and D
B: require C and D
[解决办法]
A抢到C资源,B抢到D资源,但是需要D资源才能完成C操作,需要C资源才能完成D操作,这样一来就产生死锁
解决:
 将C和D作为一个模块整体加锁
[解决办法]
循环等待,银行家算法

热点排行