永发信息网

如何避免抄袭,什么是死锁?预防死锁有哪些方法

答案:1  悬赏:70  手机版
解决时间 2021-04-23 19:20
如何避免抄袭,什么是死锁?预防死锁有哪些方法
最佳答案
在并发程序设计中,死锁 (deadlock) 是一种十分常见的逻辑错误。通过采用正确的编程方式,死锁的发生不难避免。
死锁的四个必要条件
在计算机专业的本科教材中,通常都会介绍死锁的四个必要条件。这四个条件缺一不可,或者说只要破坏了其中任何一个条件,死锁就不可能发生。我们来复习一下,这四个条件是:
?互斥(Mutual exclusion):存在这样一种资源,它在某个时刻只能被分配给一个执行绪(也称为线程)使用;
?持有(Hold and wait):当请求的资源已被占用从而导致执行绪阻塞时,资源占用者不但无需释放该资源,而且还可以继续请求更多资源;
?不可剥夺(No preemption):执行绪获得到的互斥资源不可被强行剥夺,换句话说,只有资源占用者自己才能释放资源;
?环形等待(Circular wait):若干执行绪以不同的次序获取互斥资源,从而形成环形等待的局面,想象在由多个执行绪组成的环形链中,每个执行绪都在等待下一个执行绪释放它持有的资源。
解除死锁的必要条件
不难看出,在死锁的四个必要条件中,第二、三和四项条件比较容易消除。通过引入事务机制,往往可以消除第二、三两项条件,方法是将所有上锁操作均作为事务对待,一旦开始上锁,即确保全部操作均可回退,同时通过锁管理器检测死锁,并剥夺资源(回退事务)。这种做法有时会造成较大开销,而且也需要对上锁模式进行较多改动。
消除第四项条件是比较容易且代价较低的办法。具体来说这种方法约定:上锁的顺序必须一致。具体来说,我们人为地给锁指定一种类似“水位”的方向性属性。无论已持有任何锁,该执行绪所有的上锁操作,必须按照一致的先后顺序从低到高(或从高到低)进行,且在一个系统中,只允许使用一种先后次序。
请注意,放锁的顺序并不会导致死锁。也就是说,尽管按照 锁A, 锁B, 放A, 放B 这样的顺序来进行锁操作看上去有些怪异,但是只要大家都按先A后B的顺序上锁,便不会导致死锁。
举例
假如有三个对象A、B、C,我们人为约定它们的锁序是: A 先于 B 先于 C。举例说来,下列锁序均为合法:
? 锁C,放C
? 锁B,放B
? 锁B,锁C,放B,放C
? 锁B,锁C,放C,放B
? 锁A,放A
? 锁A,锁C,放A,放C
? 锁A,锁C,放C,放A
? 锁A,锁B,放A,放B
? 锁A,锁B,放B,放A
? 锁A,锁B,锁C,放A,放B,放C
? 锁A,锁B,锁C,放C,放B,放A
而在上面定义的系统中,可能导致发生死锁典型上锁序列包括:
? 锁B,锁A,锁C,放C,放A,放B
(因为先B后A的上锁顺序违反了锁序约定,如果另一执行绪同时按照先A后B的顺序上锁,则可能由于执行绪甲获得了B,执行绪乙获得了A,而导致双方同时等待对方释放所持有的锁,从而形成死锁局面;解法是将操作序列中增加适当的锁操作,即改为锁B,放B,锁A,锁B,锁C,放C,放A,放B)
或者说,只要拿锁的时候不出现逆序(例如拿着C的时候试图抓B或A,或者拿着B的时候试图抓A),并出现潜在逆序的时候先放掉“小”锁再抓大的,就一定不造成死锁了。...余下全文>>
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
什么事最难办?
中国面积最少的省
问问里已解决的最佳答案与答案有什么区别?都
朗逸1.6的车窗遥控失灵,不知道什么原因
是姚明阻碍了布鲁克斯的发挥吗?
我想买个60JS新剑 2K 浑然 大约多少钱 大浑然
关于【最终幻想】
珠海除了海岛以外,适合露营的地方有什么好介
我应聘了一个火锅店的工作他说让我把身份证原
文艺句子关于秋天,求一些唯美文艺的文字,句
修建水库会对自然地理环境产生哪些影响
找个QQ会员2以上的帮忙
快一秒地址在什么地方,想过去办事
怎样在百度上,上传视频
横店影视城必玩的景点是哪些?
推荐资讯
DNF贤者和岩鳞肩的图纸哪里暴?
做皮肤向心性按摩有哪些禁忌症
我是农历1985年8月初3生的,是什么性格
对好茶壶的赞美句子,感谢婆婆的美句子
小米路由器2怎么换到小米路由器hd上
有关唱歌的句子
开车需要办什么手续?
江苏移动全球通
电脑店取什么样的名字好听,我要拿去注册的
差人强意的意思是什么,差强人意和强差人意
奔跑吧兄弟第五季度第六期最后哪点热巴和贾玲
手机鱼眼镜头怎么安装,手机广角及微距镜头可
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?