操做系統對死鎖的描述以下:工具
所謂死鎖:是指兩個或兩個以上的進程在執行過程當中,因爭奪資源而形成的一種互相等待的現象,若無外力做用,它們都將沒法推動下去。 spa
那麼爲何會產生死鎖呢?操作系統
1.由於系統資源不足。線程
2.進程運行推動的順序不合適。 進程
3.資源分配不當。 資源
而產生死鎖的條件有四個:循環
1.互斥條件:所謂互斥就是進程在某一時間內獨佔資源。請求
2.請求與保持條件:一個進程因請求資源而阻塞時,對已得到的資源保持不放。im
3.不剝奪條件:進程已得到資源,在末使用完以前,不能強行剝奪。數據
4.循環等待條件:若干進程之間造成一種頭尾相接的循環等待資源關係。
1) 先用!locks查看全部的線程佔用的鎖
這裏能夠看到有三個線程正在等待三個鎖,第一個線程等待的鎖是0043a620,但被5e4這條線程佔用,第二個線程等待的鎖是0043a844,但被5dc線程佔用,
第三個線程等待的鎖是031d40d4,也被5dc線程佔用。
2)接着,咱們須要查看5e4線程和5dc線程的id,具體能夠經過查看工具欄中Processes and Threads,以下圖所示,5e4的線程的id爲53,5dc線程的id爲51。
3)分別輸入~53kb和~51kb查看這個兩個線程的調用棧,結果以下圖所示
由數據可知,5e4線程正在等待一把0043a844的鎖,而5dc線程也正在等待鎖0043a620。
4)結合第一步獲取的信息可知,5e4線程要去獲取已經被5dc佔用的鎖0043a844,而5dc又要去獲取已經被5e4佔用的鎖0043a620,如此造成環路,就產生了死鎖