執行緒的死鎖

2021-09-01 15:53:04 字數 610 閱讀 9963

前天俺們談到了加鎖,但是在使用加鎖的同時又會帶來乙個問題,就是死鎖。什麼叫死鎖?

所謂死鎖: 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。

那麼為什麼會產生死鎖呢?

1.因為系統資源不足。

2.程序執行推進的順序不合適。

3.資源分配不當。

學過作業系統的朋友都知道:產生死鎖的條件有四個:

1.互斥條件:所謂互斥就是程序在某一時間內獨佔資源。

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

3.不剝奪條件:程序已獲得資源,在末使用完之前,不能強行剝奪。

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

例如:

死鎖是因為多執行緒訪問共享資源,由於訪問的順序不當所造成的,通常是乙個執行緒鎖定了乙個資源a,而又想去鎖定資源b;在另乙個執行緒中,鎖定了資源b,而又想去鎖定資源a以完成自身的操作,兩個執行緒都想得到對方的資源,而不願釋放自己的資源,造成兩個執行緒都在等待,而無法執行的情況。

分析死鎖產生的原因不難看出是由訪問共享資源順序不當所造成的,下面寫乙個造成執行緒死鎖的例子,希望能對大家理解多執行緒死鎖問題

執行緒的死鎖

如果乙個程序集合裡面的每個程序都在等待這個集合中的其他乙個程序 包括自身 才能繼續往下執行,若無外力他們將無法推進,這種情況就是死鎖,處於死鎖狀態的程序稱為死鎖程序 乙個簡單的死鎖類 當deadlock類的物件flag 1時 td1 先鎖定o1,睡眠500毫秒 而td1在睡眠的時候另乙個flag 0...

執行緒的死鎖

死鎖的必要條件 1.互斥 每個資源要麼已經分配給了乙個程序,要麼就是可用的 2.占有和等待 已經得到了某個資源的程序可以再請求新的資源。3.不可搶占 已經分配給乙個程序的資源不能強制性的被搶占,它只能被占有他的程序顯式的釋放 處理死鎖的方法 1.鴕鳥策略 就是忽略死鎖,假裝什麼都沒有發生。死鎖的檢測...

執行緒的同步,死鎖

同步就是協同步調,按預定的先後次序進 運 如 你說完,我再說。同 字從字 上容易理解為 起動作 其實不是,同 字應是指協同 協助 互相配合。例如 如程序 執行緒同步,可理解為程序或執行緒a和b 塊配合,a執 到 定程度 時要依靠b的某個結果,於是停下來,示意b運 b依 執 再將結果給 a a再繼續操...