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

轉自:牛客網

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

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


下面是詳細解釋:

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

1.破壞  請求和保持條件

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

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

2.破壞  不可搶佔條件

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

3.破壞 循壞等待條件

對各進程請求資源的順序做一個規定,避免相互等待。這種方法對資源的利用率比前兩種都高,但是前期要爲設備指定序號,新設備加入會有一個問題,其次對用戶編程也有限制




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章