如何確保N個執行緒可以訪問N個資源同時又不導致死鎖

2021-08-09 06:45:40 字數 584 閱讀 7872

**:牛客網

如何確保n個執行緒可以訪問n個資源同時又不導致死鎖?

答:使用多執行緒時,一種非常簡單的避免死鎖的方式就是:指定鎖的順序,並強制執行緒按照指定的順序獲取鎖。因此所有的執行緒都是以同樣的加鎖和釋放鎖,就不會出現死鎖了

下面是詳細解釋:

預防死鎖,預先破壞產生死鎖的四個條件。互斥不可能破壞,所以有如下3種方法:

1.破壞  請求和保持條件

1.1)程序等所有要請求的資源都空閒時才能申請資源,這種方法會使資源嚴重浪費(有些資源可能僅在執行初期或結束時才使用,甚至根本不使用)

1.2)允許程序獲取初期所需資源後,便開始執行,執行過程中再逐步釋放自己占有的資源。比如有乙個程序的任務是把資料複製到磁碟中再列印,前期只需要獲得磁碟資源而不需要獲得印表機資源,待複製完畢後再釋放掉磁碟資源。這種方法比上一種好,會使資源利用率上公升。

2.破壞  不可搶占條件

這種方法代價大,實現複雜

3.破壞 循壞等待條件

對各程序請求資源的順序做乙個規定,避免相互等待。這種方法對資源的利用率比前兩種都高,但是前期要為裝置指定序號,新裝置加入會有乙個問題,其次對使用者程式設計也有限制

如何確保N個執行緒可以訪問N個資源同時又不導致死鎖?

首先我們要了解產生死鎖的原因 多執行緒產生死鎖需要同時滿足四個條件 互斥 條件 乙個資源每次只能被乙個執行緒使用。保持和請求 條件 乙個執行緒因請求資源而阻塞 時,對已獲得的資源保持不放。不可剝奪 條件 程序已經獲得的資源,在未使用完之前,不能強行剝奪。迴圈 等待條件 若干執行緒之間形成一種頭尾相接...

DFS 剪枝 N個蛋放入M個籃子並可以任意取

筆試題 有n個蛋和m個籃子,把蛋放到m個籃子裡,每個籃子都不能為空。另外,需要滿足 任意乙個小於n的正整數,都能由某幾個籃子內蛋的數量相加的和得到。寫出程式,使得輸入乙個 n,m 輸出所有可能的分配情況 include stdafx.h include include using namespace...

如何確定乙個N!末尾有多少個零

題目 1 2 3 100 求結果末尾有多少個零 分析 一般類似的題目都會蘊含某種規律或簡便方法的,階乘末尾乙個零表示乙個進製,則相當於乘以10 而10 是由2 5所得,在1 100當中,可以產生10的有 0 2 4 5 6 8 結尾的數字,顯然2是足夠的,因為4 6 8當中都含有因子2,所以都可看當...