面試過程中偶爾會有面試官會問到死鎖的問題,那麼我們通常了解乙個東西是怎麼了解的呢,比如死鎖,什麼叫死鎖,什麼情況下會發生死鎖,死鎖怎麼解決,或者怎麼避免死鎖,這就是我們學習乙個東西去掌握時需要考慮的。
學到多執行緒的時候,經常有過注意讓我們避免發生死鎖問題,
那麼什麼是死鎖呢?
我們不妨舉個例子:
曾經在網上看到這麼乙個比較易懂的例子,兩輛車相對行駛在只容許一輛車通過的一座橋上,這時候a車佔據了橋的s1部分,b車佔據了橋的s2部分,兩輛車又都互不相讓,你等我退,我等你退,就造成了一直等待下去,這種現象我們就稱之為死鎖。
了解了什麼叫死鎖,我們來了解一下什麼情況下會發生死鎖:
1)互斥條件:指程序對所分配到的資源進行排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。
2)請求和保持條件:指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。
3)不剝奪條件:指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。
4)環路等待條件:指在發生死鎖時,必然存在乙個程序——資源的環形鏈,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的資源,……,pn正在等待已被p0占用的資源。
那麼開發過程中我們應該怎麼對待死鎖這個問題呢?
1) 預防死鎖。
這是一種較簡單和直觀的事先預防的方法。方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件中的乙個或者幾個,來預防發生死鎖。預防死鎖是一種較易實現的方法,已被廣泛使用。但是由於所施加的限制條件往往太嚴格,可能會導致系統資源利用率和系統吞吐量降低。
2) 避免死鎖。
該方法同樣是屬於事先預防的策略,但它並不須事先採取各種限制措施去破壞產生死鎖的的四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。
3)檢測死鎖。
這種方法並不須事先採取任何限制性措施,也不必檢查系統是否已經進入不安全區,此方法允許系統在執行過程中發生死鎖。但可通過系統所設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源,然後採取適當措施,從系統中將已發生的死鎖清除掉。
4)解除死鎖。
這是與檢測死鎖相配套的一種措施。當檢測到系統中已發生死鎖時,須將程序從死鎖狀態中解脫出來。常用的實施方法是撤銷或掛起一些程序,以便**一些資 源,再將這些資源分配給已處於阻塞狀態的程序,使之轉為就緒狀態,以繼續執行。死鎖的檢測和解除措施,有可能使系統獲得較好的資源利用率和吞吐量,但在實 現上難度也最大。
說了這麼多,我們通常需要記住的是,理解了死鎖的概念,我們優先考慮從一開始盡量避免來解決這個問題。
你憑什麼做SEO?
seo這個職業門檻很低,我記得我接觸seo這個職業完全是誤打誤撞,那是我大學即將畢業出來實習的時候,本意是想著從事做 程式方面的,但是程式又沒怎麼搞明白,就想先找個工作做做看,剛好同班有幾個同學要去一家網路公司面試,我就要了 徵求面試的機會。簡單的 交談後,很容易的約好次日與那幾個同學一起去面試。這...
無線開發,你憑什麼吸引VC
今天聽聞乙個朋友的公司倒閉了,而這家公司就在春節前我還曾經有過去的意向。那麼最終為什麼沒過去,其實是憑藉一種直覺,也許是在 無線 的圈子裡混的時間久了。對乙個專案最後是成功還是失敗,都會有一種職業的直覺。之前也看到過很多朋友的公司倒下去,我也一直在想這個問題。在目前中國的無線領域,賺錢的公司也很多。...
無線開發,你憑什麼吸引VC
今天聽聞乙個朋友的公司倒閉了,而這家公司就在春節前我還曾經有過去的意向。那麼最終為什麼沒過去,其實是憑藉一種直覺,也許是在 無線 的圈子裡混的時間久了。對乙個專案最後是成功還是失敗,都會有一種職業的直覺。之前也看到過很多朋友的公司倒下去,我也一直在想這個問題。在目前中國的無線領域,賺錢的公司也很多。...