死鎖的產生與解決

2021-07-03 13:53:46 字數 901 閱讀 7120

死鎖:所謂死鎖,是指在多道程式系統中,指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。產生死鎖的主要原因有兩個:一是競爭資源;二是多道程式執行時,程序推進順序不合理。

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

(1)互斥條件:指程序對所分配到的資源進行獨佔且排它性使用,即在一段時間內某資源只由乙個程序占用。如果此時還有其它程序請求資源,則請求者只能等待,直至占有資源的程序用畢釋放。

(2)不剝奪條件:又稱不可搶占或不可強佔。指程序已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

(3)請求和保持條件:指程序已經保持至少乙個資源,但又提出了新的資源請求,而該資源已被其它程序占有,此時請求程序阻塞,但又對自己已獲得的其它資源保持不放。

(4)環路等待條件:指在發生死鎖時,必然存在乙個程序等待佇列,即程序集合中的p0正在等待乙個p1占用的資源;p1正在等待p2占用的源,……,pn正在等待已被p0占用的資源。

2. 解決死鎖的方法

(1)預防死鎖:破壞產生死鎖的四個必要條件中的乙個或者幾個,來預防發生死鎖。這種方法會導致系統資源利用率過低。

(2)避免死鎖:在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。這種方法只需以較弱的限制條件為代價,並可獲得較高的資源利用率。

(3)檢測死鎖:不須事先採取任何限制性措施,也不必檢查系統是否已經進入不安全區,此方法允許系統在執行過程中發生死鎖。但可通過系統所設定的檢測機構,及時地檢測出死鎖的發生,並精確地確定與死鎖有關的程序和資源。檢測方法包括定時檢測、效率低時檢測、程序等待時檢測等。

(4)解除死鎖:取適當措施,從系統中將已發生的死鎖清除掉。

08 死鎖 產生與解決

1 死鎖 多個執行緒各自占用一些資源,並且相互等待其他執行緒占用的資源才能進行,而導致兩個或多個執行緒都在等待對方釋放資源,所以度停止執行了。產生的原因 過多的同步可能造成死鎖 某乙個同步塊同時擁有兩個以上物件的鎖時,就可能發生死鎖問題 死鎖出現的情況 package com.tsymq.threa...

解決產生oracle sql死鎖

1 查詢資料庫死鎖 可以檢視產生死鎖的使用者,死鎖狀態,狀態,產生死鎖的機器和應用程式 2 查詢產生死鎖的語句 select sql text from v sql where hash value in select sql hash value from v session where sid ...

死鎖的產生與預防

在多執行緒中,為了保證執行緒安全,我們會使用互斥鎖,在某些程序或者執行緒中,使用了某些資源,為了完成任務,需要請求某些程序或執行緒所擁有的資源,從而形成了永久性等待狀態 1.互斥條件 乙個資源每次只能被乙個執行流執行 2.請求與保持 乙個資源想要獲取資源時阻塞,不會釋放已有資源 3.不可剝奪條件 乙...