避免死鎖的產生

2021-10-24 03:20:37 字數 633 閱讀 5124

死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。

第乙個建議往往是最簡單的: 乙個執行緒已獲得乙個鎖時, 再別去獲取第二個。 如果能堅持這個建議, 因為每個執行緒只持有乙個鎖, 鎖上就不會產生死鎖。 即使互斥鎖造成死鎖的最常見原因, 也可能會在其他方面受到死鎖的困擾(比如: 執行緒間的互相等待)。 當需要獲取多個鎖, 使用乙個 std::lock 來做這件事(對獲取鎖的操作上鎖), 避免產生死鎖。

第二個建議是次簡單的: 因為**是使用者提供的, 沒有辦法確定使用者要做什麼; 使用者程式可能做任何事情, 包括獲取鎖。 你在持有鎖的情況下, 呼叫使用者提供的**; 如果使用者**要獲取乙個鎖, 就會違反第乙個指導意見, 並造成死鎖(有時, 這是無法避免的)。 當你正在寫乙份通用**, 每乙個操作的引數型別, 都在使用者提供的**中定義, 就需要其他指導意見來幫助你

當硬性條件要求你獲取兩個以上(包括兩個)的鎖, 並且不能使用 std::lock 單獨操作來獲取它們;那麼最好在每個執行緒上, 用固定的順序獲取它們獲取它們(鎖).

4、補充

能夠不使用鎖,盡量不要用。在使用鎖之前,需要做好全域性的設計,明確鎖的範圍。儘量減少鎖的範圍。

死鎖,產生原因,避免

什麼是死鎖 死鎖是指多個程序因競爭資源而造成的一種僵局 互相等待 若無外力作用,這些程序都將無法向前推進。例如,在某乙個計算機系統中只有一台印表機和一台輸入 裝置,程序p1正占用輸入裝置,同時又提出使用印表機的請求,但此時印表機正被程序p2 所占用,而p2在未釋放印表機之前,又提出請求使用正被p1占...

死鎖的產生,防止,避免

在多工系統下,當乙個或多個程序等待對方的資源,而在等待對方資源之前不會釋放得到的資源,這樣造成迴圈等待的一種現象。競爭系統資源 程序的推進順序不當 1.資源互斥 資源不共享 每個資源要麼已經分配給乙個程序,要麼是可用的,只有這兩種狀態,資源不可以被共享使用 2.請求並保持 已經的到資源的程序還可以繼...

死鎖的產生和避免

死鎖的產生和避免 死鎖的定義 該組程序 執行緒 的每乙個程序 執行緒 都在等待僅由該組程序 執行緒 的其他程序 執行緒 才能引發的事件,該程序 執行緒 是死鎖的 引入鎖是為了解決多執行緒直接的同步與互斥問題 1 執行緒自己將自己鎖住 同乙個執行緒先後兩次呼叫lock,第二次呼叫時由於鎖已經被占用,該...