1. 程式人生 > >產生死鎖的必要條件

產生死鎖的必要條件

死鎖是作業系統裡裡面的一個重要的概念,死鎖通常發生在併發的場景裡。

死鎖是多個程序或執行緒,彼此爭搶資源而陷入僵局的一種情況。

在筆者參加的多次面試中,發現不少候選人雖然大概知道死鎖是一種因為爭搶資源引起的問題,但真的要寫一個死鎖的例子的話,還是有不少候選人不知道該如何下手。

其實,真正理清楚了死鎖產生的必要的條件,寫出一個死鎖的例子並不困難。那麼,就java的多執行緒而言,產生死鎖有哪些必要條件呢?

1,必須有2個或以上的執行緒。一個執行緒是不會產生死鎖的,它頂多產生等待。

2,必須有2個臨界資源,即,必須有2個鎖。這也是死鎖產生的必要的條件。當只有一個臨界資源,或者說只有一個鎖時,當一個執行緒獲取了鎖,另一個執行緒雖然暫時無法獲取鎖,但它至多也就是需要進行等待。而不會陷入死鎖。

3,兩個執行緒,每個執行緒都獲取了其中的一個鎖,但為了完成工作,還需對方的另一個鎖。這種情況下,才會產生死鎖。這種情況也稱為迴圈等待。

4,不可剝奪。

以上即為死鎖產生的必要條件。