2016-2022 All Rights Reserved.平安財經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號:閩ICP備19027007號-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。
大家好,小美來為大家解答以上問題。死鎖的原因及解決方法,死鎖的原因及解決辦法很多人還不知道,現(xiàn)在讓我們一起來看看吧!
1、死鎖是由兩個或多個線程持有彼此所需的資源造成的,這會導(dǎo)致這些線程處于等待狀態(tài),無法執(zhí)行。
2、死鎖的四個必要條件是互斥:線程對資源的占用是排他的,一個資源在釋放之前只能被一個線程占用。請求和保持條件:當(dāng)一個線程阻塞所請求的被占用資源時,它不會釋放已經(jīng)獲得的資源。不剝奪:在一個線程釋放資源之前,其他線程不能剝奪占用。等待:當(dāng)死鎖發(fā)生時,線程進入無限循環(huán)并被永久阻塞。
3、死鎖是由對不可搶占資源的競爭造成的。p1已經(jīng)打開了F1,p2已經(jīng)打開了F2,但是F1和F2都是不可搶占的。這是一個僵局。
4、對可消耗資源的競爭導(dǎo)致僵局。如果進程之間的通信出現(xiàn)故障,就會出現(xiàn)死鎖。例如,p1向p2發(fā)送消息m1,p1從p3接收消息m3,p2接收p1的m1并向p3和p3發(fā)送m2,以此類推。如果進程之間的消息先發(fā)送,通信就可以完成,但是如果消息先接收,就會出現(xiàn)死鎖。
5、進程順序不當(dāng),運行過程中請求和釋放資源的順序不當(dāng),也會導(dǎo)致進程死鎖。
6、避免死鎖的方法破壞了“請求并保持”條件,并試圖使進程不那么貪婪。如果你已經(jīng)有了資源,就不要去爭奪那些無法搶占的資源。比如申請資源的時候,讓流程一次性申請所有需要的資源,而不是一次又一次的申請。當(dāng)一些應(yīng)用的資源不可用時,讓線程等待。但是,這種方法是資源的浪費,過程可能永遠是饑餓的。另一種方法是要求流程在申請資源之前釋放自己的資源。
7、破壞“非搶占”條件,允許進程搶占。方法一:如果搶資源被拒絕,釋放自己的資源。方法2:操作系統(tǒng)允許抓取。只要你有高優(yōu)先級,你就能抓住它。
8、打破“循環(huán)等待”的條件將統(tǒng)一對系統(tǒng)中的所有資源進行編號。流程可以隨時申請資源,但所有申請都必須按照資源的編號順序(升序)提交。
9、每個進程的死鎖檢測,以及每個資源的唯一編號。設(shè)置資源分配表,記錄進程與占用資源的關(guān)系。建立一個流程等待表,記錄每個流程和要申請的資源之間的關(guān)系。
10、死鎖解除搶占資源,從一個或多個進程中搶占足夠數(shù)量的資源,并將其分配給死鎖進程以解除死鎖狀態(tài)。
11、終止(或撤銷)進程,終止(或撤銷)系統(tǒng)中的一個或多個死鎖進程,直到循環(huán)被打破,這樣系統(tǒng)就可以從死鎖狀態(tài)中釋放出來。
本文到此結(jié)束,希望對大家有所幫助。
2016-2022 All Rights Reserved.平安財經(jīng)網(wǎng).復(fù)制必究 聯(lián)系QQ280 715 8082 備案號:閩ICP備19027007號-6
本站除標(biāo)明“本站原創(chuàng)”外所有信息均轉(zhuǎn)載自互聯(lián)網(wǎng) 版權(quán)歸原作者所有。