死鎖產生的四個必要條件,什麽時候會發生死鎖,發生死鎖之後應該做什麽處理?或者說我們應該怎麽避免死鎖的發生?
其實死鎖這個概念在之前哲學家進餐問題當中就已經提到過,如果五個哲學家進程都并發地執行,
那麽他們有可能依次拿起自己左手邊的筷子。但是之後當他們都嘗試拿起右手邊的筷子的時候,發現右邊那支筷子已經被另一個哲學家就是自己右手邊的哲學家所占領了,
所以這種情況下就會發生這種循環等待的現象。每一個哲學家手裏都持有一支他的左邊那個哲學家想要的筷子,但是他同時又在等待他右邊的那個哲學家手裏的那支筷子,所以在這種情況下所有哲學家都是阻塞狀態,沒有一個哲學家進程可以順利地往下推進,因此這種情況下就稱爲發生了所謂的死鎖現象。
而飢餓這個概念咱們在之前處理機調度的時候提到過,是由於進程長期得不到想要的資源,而無法向前推進的現象。比如說咱們之前介紹短進程優先算法的時候,如果說用短進程優先算法,系統中有源源不斷的短進程到來的話,長進程就會一直得不到處理機這種資源,所以就導致了長進程飢餓的現象。而死循環是指某種進程在執行的過程中因爲遇到一些問題所以一直跳不出某一個循環,比如說while循環或者for循環這樣的現象。當然有時候這個死循環是因爲我們自己程序邏輯的BUG而導致的,有的時候又是程序員故意設計的,比如說之前咱們寫過的那些PV操作的代碼,其實就是故意設計成死循環的。那麽這兒所指的死循環其實特指的是這種程序邏輯BUG導致的死循環,導致了一個進程沒有辦法按照我們期待的那樣順利地往下推進。那這三個概念的共同點在於它們都是進程發生了某種異常的狀況而無法繼續往下推進的這種現象,所以這三個概念其實比較容易在選擇題當中放在一起,對大家進行考察。由於死鎖的進程是在等待某一種資源的分配,因此發生死鎖的進程肯定是處於阻塞態的。
原文:https://www.cnblogs.com/ZHONGZHENHUA/p/11218561.html