1. 程式人生 > >死鎖的概念,產生的主要原因,必要條件以及預防與處理策略

死鎖的概念,產生的主要原因,必要條件以及預防與處理策略

一.死鎖的概念

兩個或多個程序被無限的阻塞,相互等待的一種狀態。

二.死鎖產生的原因

1.資源分配不當

2.系統資源不足(程序間就會為了爭奪資源而產生死鎖)

3.程序執行推進順序不當

三.產生死鎖的必要條件

1.資源獨佔;(一個資源每次只能給一個程序使用)

2.不可剝奪;(資源申請者不能強行從資源佔用者手中奪取資源,除非資源佔用者自己心甘情願的釋放)

3.部分分配,申請佔用;(一個程序在申請新的資源的同時保持著對原資源的佔用(動態申請,動態分配))

4.迴圈等待;({a1,a2,a3,......an},假設這是一組程序,那麼就會出現,a1等待a2佔用的資源,a2等待a3佔用的資源..........,an等待a1佔用的資源,一直這樣形成一個等待迴路)

四.處理策略

死鎖的處理策略有:鴕鳥策略,預防策略,避免策略,檢測與恢復策略

鴕鳥策略:也可以理解為忽略策略,就是當產生死鎖時不去管它。(在計算機作業系統中如果真的發生死鎖且影響系統正常執行,我們可以手動干預---重啟)

為了避免不發生死鎖,我們必須阻止上述四個必要條件之一不能發生(預防死鎖策略),或者允許死鎖發生,但要能夠檢測出死鎖,並且有能力恢復(檢測與恢復策略)

避免死鎖策略:在資源動態分配的過程中,用某種方法阻止系統進入不安全狀態。

三種策略的優缺點比較:

相關推薦

概念產生主要原因必要條件以及預防處理策略

一.死鎖的概念 兩個或多個程序被無限的阻塞,相互等待的一種狀態。 二.死鎖產生的原因 1.資源分配不當 2.系統資源不足(程序間就會為了爭奪資源而產生死鎖) 3.程序執行推進順序不當 三.產生死鎖的必

產生原因必要條件以及解決辦法

1、死鎖的概念:在計算機系統中有很多一次只能有一次程序使用的資源,比如:印表機列印檔案。但是在多道程式設計的環境下,若干程序往往要共享這類資源,而且一個程序所需要的資源不止一個,在這種情況下,就會出現若干程序去競爭有限的資源,又因為推進順序不當,從而構成多個程序迴圈等待它方所佔用的資源而無限

產生原因產生死必要條件和解決的方法

死鎖:指多個程序因競爭共享資源而造成的一種僵局,若無外力作用,這些程序都將永遠不能再 向前推進。 安全狀態與不安全狀態:安全狀態指系統能按某種程序順序來為每個程序分配其所需資源,直至最大需求,使每個程序都可順利完成。若系統不存在這樣一個序列,則稱系統處於不安全狀態。

MySQL/InnoDB中樂觀、悲觀、共享、排它、行、表概念的理解

MySQL/InnoDB的加鎖,一直是一個面試中常問的話題。例如,資料庫如果有高併發請求,如何保證資料完整性?產生死鎖問題如何排查並解決?我在工作過程中,也會經常用到,樂觀鎖,排它鎖,等。於是今天就對這幾個概念進行學習,屢屢思路,記錄一下。 注:MySQL是一

mysql/innoDB中樂觀悲觀共享排他概念的理解

MySQL是一個支援外掛式儲存引擎的資料庫系統。本文下面的所有介紹,都是基於InnoDB儲存引擎,其他引擎的表現,會有較大的區別。 儲存引擎檢視 MySQL給開發者提供了查詢儲存引擎的功能,我這裡使用的是MySQL5.5.28,可以使用: show engine

time_wait狀態產生原因危害如何避免【轉】

  (轉自:https://blog.csdn.net/u013616945/article/details/77510925) 前言 請說說你對TCP連線中time_wait狀態的理解 解答: 先上TCP的狀態變遷圖 1. time_wait狀態如何產生?&

|執行緒之間的互動wait和notify

A執行緒佔用物件蓋倫 B執行緒佔用物件提莫 A試圖佔用提莫,等待B釋放cpu資源 B同理 相互等待,GG ————————————————————————————————————————————————————————— 同樣加血減血 當hurt hp==1時就要停止,當

面試總結之time_wait狀態產生原因危害如何避免

前言 請說說你對TCP連線中time_wait狀態的理解 解答: 先上TCP的狀態變遷圖 1. time_wait狀態如何產生?  由上面的變遷圖,首先呼叫close()發起主動關閉的一方,在傳送最後一個ACK之後會進入time_wait的狀態,也就說該傳送方會保

的定義 產生原因 必要條件 避免和解除的方法

                1.死鎖:如果一組程序中的每一個程序都在等待僅由該組程序中的其它程序才能引發的事件,那麼該組程序是

c3p0資料庫連線池問題和mysql重連連線丟失

c3p0引數解釋 #最常用配置#initialPoolSize:連線池初始化時建立的連線數,default : 3,取值應在minPoolSize與maxPoolSize之間 c3p0.initialPoolSize=10#minPoolSize:連線池保持的最小連線數,d

SESSION COOKIE 的區別是什麼請從協議產生原因作用說明?

產生的背景和原理:HTTP協議是無狀態的協議。一旦資料交換完畢,客戶端與伺服器端的連線就會關閉,再次交換資料需要建立新的連線。這就意味著伺服器無法從連線上跟蹤會話。於是需要引入一種機制,COOKIE於是就順應而生。Session是另一種記錄客戶狀態的機制,不同的是Cookie

time_wait狀態產生原因危害如何避免

1.先來了解TCP四次揮手的過程: ①第一次:主機1(可以使客戶端,也可以是伺服器端),設定Sequence Number和Acknowledgment Number,向主機2傳送一個FIN報文段;此時,主機1進入FIN_WAIT_1狀態;這表示主機1沒有資料要傳送給主機2了

作業系統(10)程序--概念處理方法:預防避免、銀行家演算法、檢測

文章目錄 1. 死鎖概念 2. 死鎖處理方法 1. 死鎖預防 2. 死鎖避免 3. 銀行家演算法 4. 死鎖檢測 1. 死鎖概念 死鎖是指:由於競爭資源或者通

MySQL中的樂觀、悲觀、共享、排它、行、表概念

下文的所有介紹,都是基於InnoDB儲存引擎,其他引擎的表現,會有較大的區別。 樂觀鎖 用資料版本(Version)記錄機制實現,是樂觀鎖最常用的一種實現方式。什麼是資料版本?即為資料增加一個版本標識,一般是通過為資料庫表增加一個數字型別的“version”欄位來實現

Volatile和synchronized區別、概念

1、Volatile變數和同步機制synchronized 、Lock區別 1、volatile變數是一種稍弱的同步機制在訪問volatile變數時不會執行加鎖操作,因此也就不會使執行執行緒阻塞,因此volatile變數是一種比synchronized關鍵字更輕量級的同步機

使用IdIPWatch後產生iphist.dat並非病毒

大家去百度搜一下iphist.dat,會發現基本都說它是由病毒產生的,難道我也中毒了?怎麼可能,呵呵~ 經過一翻查詢解決了該問題。執行程式時沒問題,當關閉程式後便產生了iphist.dat檔案,這是由於使用了IdIPWatch,並未去修改它的相關引數所致,自然它的預設設定會自動產生一個iphist.dat,

概念以及預防解決方法簡介 多線程上篇(八)

最簡 send 人員 記錄 事情 定期 資源分配圖 避免死鎖 最終 在前面不止一次的提到過死鎖。 所謂死鎖(Deadlock) 是指多個進程在運行過程中因爭奪資源而造成的一種僵局(DeadlyEmbrace),當進程處於這種僵持狀態時,若無外力作用,它們都將無法再向前推

9.概念、導致原因導致的四個必要條件預防的方法、避免的方法

死鎖避免策略      銀行家演算法:首先需要定義狀態和安全狀態的概念。系統的狀態是當前給程序分配的資源情況。因此,狀態包含兩個向量Resource(系統中每種資源的總量)和Available(未分配給程序的每種資源的總量)及兩個矩陣Claim(表示程序對資源的需求)和Allocation(表示當前分配給程

Oracle中發生表加原因檢視解決方法

一.表加鎖、死鎖出現的現象 1.對資料庫操作update,insert,delete時候,資料庫無法更新,操作等待時長,操作結果不發生改變 2.在程式中,底層(資料訪問層)操作時候,不成功,資料庫連線超時,無法操作,或者操作等待時長等現象 【加鎖的原理】:比如一個操作在進行修改一表,它

什麼是、導致原因、飢餓又是什麼?

死鎖        是指兩個或兩個以上的程序(或執行緒)在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。        一個執行緒先獲取from鎖,另一個