作業系統中有若干程序併發執行,它們不斷申請、使用、釋放系統資源,雖然系統的程序協調、通訊機構會對它們進行控制,但也可能出現若干程序都相互等待對方釋放資源才能繼續執行,否則就阻塞的情況。此時,若不借助外界因素,誰也不能釋放資源,誰也不能解除阻塞狀態。根據這樣的情況,作業系統中的死鎖被定義為系統中兩個或者多個程序無限期地等待永遠不會發生的條件,系統處於停滯狀態,這就是死鎖。
死鎖是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。
產生死鎖的四個必要條件:
(1) 互斥條件:乙個資源每次只能被乙個程序使用。
(2) 占有且等待:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。
(3)不可強行占有:程序已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。
避免死鎖的方法
面試 多執行緒
1.執行緒通常有五種狀態,建立,就緒,執行 阻塞和死亡狀態。2.阻塞的情況又分為三種 1 等待阻塞 執行的執行緒執行wait 方法,該執行緒會釋放占用的所有資源,jvm會把該執行緒放入 等待池 中。進入這個狀態後,是不能自動喚醒的,必須依靠其他執行緒呼叫notify 或notifyall 方法才能被...
多執行緒基礎
對於多執行緒程式設計,很多人概念不清,寫 的時候要麼是處處加鎖,影響效能不說,還容易莫名其妙的死鎖,還有人對多執行緒敬而遠之。所以學習多執行緒程式設計最重要的不是學習 api,而是理解什麼才是多執行緒安全的 從例子說起 include include long global1 0 volatile ...
多執行緒基礎
什麼是併發 同時執行多個程式,或者乙個程式的多段 在巨集觀上,存在併發的,但是在微觀上,其實不存在併發 時間片 在計算機中,使用時間片來實現併發的運算 在計算甲中,在最小的單位時間上 只能執行乙個運算 用來控制多個程式之間的輪轉,使得程式交替的執行 達到併發的目的 多個cpu 多個核心 才能實現真正...