什麼是執行緒死鎖 如何避免死鎖

2021-10-07 21:53:18 字數 740 閱讀 8877

執行緒死鎖描述的是這樣一種情況:多個執行緒同時被阻塞,它們中的乙個或者全部都在等待某個資源被釋放。由於執行緒被無限期地阻塞,因此程式不可能正常終止。

如下圖所示,執行緒 a 持有資源 2,執行緒 b 持有資源 1,他們同時都想申請對方的資源,所以這兩個執行緒就會互相等待而進入死鎖狀態。

1.產生死鎖的四個必要條件?

學過作業系統的朋友都知道產生死鎖必須具備以下四個條件:

互斥條件:該資源任意乙個時刻只由乙個執行緒占用。

請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。

不剝奪條件:執行緒已獲得的資源在末使用完之前不能被其他執行緒強行剝奪,只有自己使用完畢後才釋放資源。

迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。

2如何避免執行緒死鎖?

我上面說了產生死鎖的四個必要條件,為了避免死鎖,我們只要破壞產生死鎖的四個條件中的其中乙個就可以了。現在我們來挨個分析一下:

破壞互斥條件 :這個條件我們沒有辦法破壞,因為我們用鎖本來就是想讓他們互斥的(臨界資源需要互斥訪問)。

破壞請求與保持條件 :一次性申請所有的資源。

破壞不剝奪條件 :占用部分資源的執行緒進一步申請其他資源時,如果申請不到,可以主動釋放它占有的資源。

破壞迴圈等待條件 :靠按序申請資源來預防。按某一順序申請資源,釋放資源則反序釋放。破壞迴圈等待條件。

什麼是死鎖?如何避免死鎖?

所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...

什麼是死鎖?如何避免死鎖? 以及實現執行緒死鎖才程式

所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...

Linux 什麼是死鎖以及如何避免死鎖

介紹死鎖之前,先來說一下作業系統中的資源分類 按照使用次數分類 1 可重用性資源 每乙個可重用資源中的單元只能分配給乙個程序使用,不允許多個執行緒共享。程序使用資源順序 1 請求資源,如果請求失敗程序阻塞或迴圈等待 2 使用資源 3 釋放資源。系統中的可重用資源數目都是相對固定的程式執行時不能增加或...