什麼是死鎖?

2022-08-01 20:30:18 字數 1065 閱讀 4765

執行緒死鎖是指由於兩個或者多個執行緒互相持有所需要的資源,導致這些執行緒一直處於等待其他執行緒釋放資源的狀態,無法前往執行,如果執行緒都不主動釋放所占有的資源,將產生死鎖。

當執行緒處於這種僵持狀態時,若無外力作用,它們都將無法再向前推進。

產生原因:

如執行緒a占有資源 1 的鎖,去競爭資源 2 的鎖;執行緒 b 占有資源 2 的鎖,去競爭資源1的鎖。

**表現如下

package

constxiong.concurrency.a022;

/*** 測試死鎖

* @author

constxiong

* @date 2019-09-23 19:28:23 */

public

class

testdeadlock

catch

(interruptedexception e)

system.out.println("執行緒:" + thread.currentthread().getname() + " 去獲取 o2 物件的鎖");

synchronized

(o2) }}

};//先持有 o2 的鎖,再去獲取 o1 的鎖

thread t2 = new

thread()

catch

(interruptedexception e)

system.out.println("執行緒:" + thread.currentthread().getname() + " 去獲取 o1 物件的鎖");

synchronized

(o1) }}

};t1.start();

t2.start();

}}

測試結果,發生死鎖,列印如下

執行緒:thread-0獲取到 o1 物件的鎖

休眠1秒

執行緒:thread-1獲取到 o2 物件的鎖

休眠1秒

執行緒:thread-1去獲取 o1 物件的鎖

執行緒:thread-0 去獲取 o2 物件的鎖

什麼是死鎖

程序死鎖,它是作業系統或系統軟體執行的一種狀態 在多工系統下,當乙個或多個程序等待系統資源,而資源又被程序本身或其他程序占用時,就形成了死鎖。產生死鎖的原因 系統資源不足 程序執行推進的順序不合適 資源分配不當等。產生死鎖的四個必要條件 互斥條件 乙個資源每次只能被乙個程序使用 請求與保持條件 乙個...

什麼是死鎖?

所謂死鎖是指多個程序因競爭資源而相互等待,若無外力作用,這些程序都無法向前推進。系統資源的競爭當不可剝得資源的數量不足以滿足程序的需要時,使得程序會因為爭得資源而陷入僵局 程序推進順序不當程序在執行過程中,請求和釋放資源的順序不當,也會造成死鎖。例如併發程序p1,p2 分別保持了資源r1,r2,而程...

什麼是死鎖

若干子執行緒在系統競爭時,都在等待對方對某部分資源解除占用狀態,結果是誰也不願意先解鎖,互相幹等著,程式無法執行下去 這就是死鎖 gil鎖直譯器鎖 作用 限制多執行緒同時執行,保證同一時間只有乙個執行緒執行,所以cpython裡的多執行緒其實是偽執行緒 所以python 裡常常使用協程技術來代替多執...