什么是多線程,鎖,死鎖,怎么避免死鎖(轉)


面試官問線程的問題,以前從來沒有總結過怎么回答,一下子就說不出來了。回來細細總結一下,下次不能再不知道從哪里說起了

  細思之, 首先應該 了解什么是線程、線程是資源分配的基本單位,程序執行流的最小單位。線程可以共用內存資源,多線程能解決cpu空閑的問題。 多線程能夠實現並發的執行任務,提高處理能力。多線程就會有共享資源,為了保證資源能夠互斥訪問,就必須給資源加鎖,擁有該資源鎖的線程才能訪問該資源,每個對象都有自己的鎖。

死鎖:指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去

怎么避免死鎖:

       死鎖的條件:

死鎖的四個必要條件

在計算機專業的本科教材中,通常都會介紹死鎖的四個必要條件。這四個條件缺一不可,或者說只要破壞了其中任何一個條件,死鎖就不可能發生。我們來復習一下,這四個條件是:
•互斥(Mutual exclusion):存在這樣一種資源,它在某個時刻只能被分配給一個執行緒(也稱為線程)使用;
•持有(Hold and wait):當請求的資源已被占用從而導致執行緒阻塞時,資源占用者不但無需釋放該資源,而且還可以繼續請求更多資源;
•不可剝奪(No preemption):執行緒獲得到的互斥資源不可被強行剝奪,換句話說,只有資源占用者自己才能釋放資源;
•環形等待(Circular wait):若干執行緒以不同的次序獲取互斥資源,從而形成環形等待的局面,想象在由多個執行緒組成的環形鏈中,每個執行緒都在等待下一個執行緒釋放它持有的資源。

解除死鎖的必要條件

不難看出,在死鎖的四個必要條件中,第二、三和四項條件比較容易消除。通過引入事務機制,往往可以消除第二、三兩項條件,方法是將所有上鎖操作均作為事務對待,一旦開始上鎖,即確保全部操作均可回退,同時通過鎖管理器檢測死鎖,並剝奪資源(回退事務)。這種做法有時會造成較大開銷,而且也需要對上鎖模式進行較多改動。

消除第四項條件是比較容易且代價較低的辦法。具體來說這種方法約定:上鎖的順序必須一致。具體來說,我們人為地給鎖指定一種類似“水位”的方向性屬性。無論已持有任何鎖,該執行緒所有的上鎖操作,必須按照一致的先后順序從低到高(或從高到低)進行,且在一個系統中,只允許使用一種先后次序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM