網(wǎng)站首頁 編程語言 正文
解決死鎖的基本方法如下:
預(yù)防死鎖、避免死鎖、檢測(cè)死鎖、解除死鎖
解決四多的常用策略如下:
鴕鳥策略、預(yù)防策略、避免策略、檢測(cè)與解除死鎖
?
死鎖:指多個(gè)進(jìn)程因競爭共享資源而造成的一種僵局,若無外力作用,這些進(jìn)程都將永遠(yuǎn)不能再 向前推進(jìn)。
安全狀態(tài)與不安全狀態(tài):安全狀態(tài)指系統(tǒng)能按某種進(jìn)程順序來為每個(gè)進(jìn)程分配其所需資源,直 至最大需求,使每個(gè)進(jìn)程都可順利完成。若系統(tǒng)不存在這樣一個(gè)序列, 則稱系統(tǒng)處于不安全狀態(tài)。
?
產(chǎn)生死鎖的原因:(1)競爭系統(tǒng)資源 (2)進(jìn)程的推進(jìn)順序不當(dāng)
產(chǎn)生死鎖的必要條件:
互斥條件:進(jìn)程要求對(duì)所分配的資源進(jìn)行排它性控制,即在一段時(shí)間內(nèi)某資源僅為一進(jìn)程所占用。
請(qǐng)求和保持條件:當(dāng)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放。
不剝奪條件:進(jìn)程已獲得的資源在未使用完之前,不能剝奪,只能在使用完時(shí)由自己釋放。
環(huán)路等待條件:在發(fā)生死鎖時(shí),必然存在一個(gè)進(jìn)程--資源的環(huán)形鏈。
解決死鎖的基本方法:
預(yù)防死鎖:
資源一次性分配:(破壞請(qǐng)求和保持條件)
可剝奪資源:即當(dāng)某進(jìn)程新的資源未滿足時(shí),釋放已占有的資源(破壞不可剝奪條件)
資源有序分配法:系統(tǒng)給每類資源賦予一個(gè)編號(hào),每一個(gè)進(jìn)程按編號(hào)遞增的順序請(qǐng)求資源,釋放則相反(破壞環(huán)路等待條件)
?
避免死鎖:
預(yù)防死鎖的幾種策略,會(huì)嚴(yán)重地?fù)p害系統(tǒng)性能。因此在避免死鎖時(shí),要施加較弱的限制,從而獲得 較滿意的系統(tǒng)性能。由于在避免死鎖的策略中,允許進(jìn)程動(dòng)態(tài)地申請(qǐng)資源。因而,系統(tǒng)在進(jìn)行資源分配之前預(yù)先計(jì)算資源分配的安全性。若此次分配不會(huì)導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),則將資源分配給進(jìn)程;否則,進(jìn)程等待。其中最具有代表性的避免死鎖算法是銀行家算法。
?
檢測(cè)死鎖
首先為每個(gè)進(jìn)程和每個(gè)資源指定一個(gè)唯一的號(hào)碼;
然后建立資源分配表和進(jìn)程等待表,例如:
?
解除死鎖:
當(dāng)發(fā)現(xiàn)有進(jìn)程死鎖后,便應(yīng)立即把它從死鎖狀態(tài)中解脫出來,常采用的方法有:
剝奪資源:從其它進(jìn)程剝奪足夠數(shù)量的資源給死鎖進(jìn)程,以解除死鎖狀態(tài);
撤消進(jìn)程:可以直接撤消死鎖進(jìn)程或撤消代價(jià)最小的進(jìn)程,直至有足夠的資源可用,死鎖狀態(tài).消除為止;所謂代價(jià)是指優(yōu)先級(jí)、運(yùn)行代價(jià)、進(jìn)程的重要性和價(jià)值等。
?
原文鏈接:https://blog.csdn.net/Beyond_2016/article/details/81359021
- 上一篇:時(shí)間戳處理的幾種方式
- 下一篇:修改node_modules的包
相關(guān)推薦
- 2022-03-17 C語言判斷數(shù)是否為素?cái)?shù)與素?cái)?shù)輸出_C 語言
- 2022-04-18 Taro編譯小程序的時(shí)候,就沒有錄音權(quán)限,沒有scope.record這個(gè)權(quán)限
- 2022-12-24 Kubernetes?ApiServer三大server權(quán)限與數(shù)據(jù)存儲(chǔ)解析_云和虛擬化
- 2022-05-29 Android?超詳細(xì)深刨Activity?Result?API的使用_Android
- 2023-03-05 Python協(xié)程的四種實(shí)現(xiàn)方式總結(jié)_python
- 2022-11-09 django中的auth模塊與admin后臺(tái)管理方法_python
- 2022-10-02 Go底層channel實(shí)現(xiàn)原理及示例詳解_Golang
- 2022-02-24 Golang?strings包常用字符串操作函數(shù)_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支