有10個資源,10個執行緒,如何保證不會出現死鎖?

2021-08-08 15:42:22 字數 585 閱讀 6436

今天面試遇到這樣乙個題:有10個資源,10個執行緒,如何保證不會出現死鎖?

在解決問題之前,先了解下產生死鎖的四個必要條件:

1. 互斥條件。在一段時間內,某資源只能被乙個程序占用。如果此時還有其他程序請求該資源,則請求程序只能等待,直至占用該資源的程序使用完畢後釋放。

2. 請求和保持條件。程序至少保持乙個資源,但又提出了新的資源請求,而該資源已被其他程序占用,此時請求程序被阻塞,蛋碎玉自己已獲得的資源保持不放。

3. 不可剝奪條件。程序已獲得的資源在未使用完畢之前不可被其他程序搶占,只能在程序使用完時由自己釋放。

4. 迴圈等待條件。在發生死鎖時,必然存在乙個程序-資源的迴圈鏈。即程序集合中的p0正在等待p1程序已占用的資源,p1正在等待p2程序已占用的資源。。。。。

面試的時候,提出了破壞「請求和保持」條件和「不可剝奪」條件,面試官不太滿意。 但是當時沒有想到破壞「迴圈等待」條件。

破壞「迴圈等待」條件:對系統中所有的資源進行線性排序,並分配不同的序號。規定:每個程序必須按序號遞增的順序請求資源。事實上,總有乙個程序佔據了較高序號的資源,此後它繼續申請的資源必然是空閒的,因而程序可以一直向前推進。

10個超實用jquery外掛程式資源

10個超實用jquery外掛程式資源 在當前的web設計中,jquery被越來越多地應用在web開發中,之所以jquery收到如此程度的歡迎,除了其本身具備的優秀易讀易操作的 編寫機制外,更多的jquery第三方外掛程式也是其被快速傳播應用的一大原因,這裡為你整理了10多個在日常的web開發過程中,...

10個iOS開發工具和資源

1.omnigraffle ultimate iphone stencil omnigraffle link,ultimate iphone stencil link 2.glyphish icons 你可能能從上面的這些圖示中看到flipboard 和 twitter 在ios上的應用使用了其中的...

10個程式設計技巧

很長一段時間以來,我都在關注如何提高 質量,也為此做過一些嘗試,我想這個話題可能大家會比較感興趣,在這裡分享一下我關於如何提高 質量的一些體會。你知道怎麼寫高質量 嗎?不要一上來就開始寫 想清楚再動手,下面分享10個寫 的小技巧教你寫出高質量 1 重構思維模式 不要一上來就開始寫 要掌握盡量多的重構...