1. 程式人生 > >死鎖面試題

死鎖面試題

(1)為什麼會產生死鎖?產生死鎖有什麼條件?

由於系統中存在一些不可剝奪資源,而當兩個或兩個以上的程序佔有自身資源,並請求對方資源時,會導致每個程序都無法向前推進,這就是死鎖。死鎖產生的必要條件有四個:互斥條件、不可剝奪條件、請求與保持條件、迴圈等待條件。

互斥條件指程序要求分配的資源是排他性的,即最多隻能同時給一個程序使用。

不剝奪條件是指程序在使用資源完畢之前,資源不能被強行奪走。

請求並保持條件是指程序佔有自身本來擁有的資源並要求其他資源。

迴圈等待條件是指存在一種程序資源的迴圈等待鏈。

(2)有什麼辦法可以解決死鎖

死鎖的處理策略可以分為死鎖預防、死鎖避免、死鎖的檢測和解除

死鎖的預防是通過設立一些限制條件,破壞死鎖的一些必要條件,讓死鎖無法發生。

死鎖的避免是在動態分配資源的過程中,用一些演算法防止系統進入不安全狀態,從而避免死鎖。

死鎖的檢測和解除是在死鎖產生前不採取任何措施,只檢測當前系統有沒有發生死鎖,並採取一些措施解除死鎖。

相關推薦

試題(什麼是,產生死的原因及必要條件)

什麼是死鎖? 所謂死鎖,是指多個程序在執行過程中因爭奪資源而造成的一種僵局,當程序處於這種僵持狀態時,若無外力作用,它們都將無法再向前推進。 產生死鎖的原因? 可歸結為如下兩點: a. 競爭資源 系統中的資源可以分為兩類: 1.

試題

(1)為什麼會產生死鎖?產生死鎖有什麼條件?由於系統中存在一些不可剝奪資源,而當兩個或兩個以上的程序佔有自身資源,並請求對方資源時,會導致每個程序都無法向前推進,這就是死鎖。死鎖產生的必要條件有四個:互斥條件、不可剝奪條件、請求與保持條件、迴圈等待條件。互斥條件指程序要求分配

java試題之什麼是、活、餓和競態條件?

    死鎖:是指兩個或兩個以上的程序(或執行緒)在執行過程中,因爭奪資源而造成的一種相互等待的現象,若無外力作用,他們將無法推進下去; 活鎖:是指兩個執行緒優先順序相同,都禮讓不走,就這樣一直僵持下去; 餓死:在單執行緒情況下,A、B兩個執行緒,A先執行;A在執行過程中

程式設計試題:編寫一個會造成資料庫的應用

相信對於"開發一個會產生死鎖的Java應用”這類需求,大家都能順利完成。但是如果題目要求得更具體一些,要求這個死鎖發生在資料庫層面,應該怎樣完成呢? 下面我提供一種答案,採用SAP的程式語言ABAP(Advanced Business Application Programming)實現。 我們從ABAP幫

【本人禿頂程式設計師】試題解密

←←←←←←←←←←←← 我都禿頂了,還不點關注! 死鎖的概念 在多執行緒環境中,我們經常會遇到多個執行緒訪問同一個共享資源的情況,這個時候必須考慮如何維護資料一致性,常見的方式是加鎖處理。只有拿到鎖的執行緒才可以訪問共享資源,通過鎖就可以讓執行緒對共享資源的訪問都是順序的,避免出現

試題:談談對程序的理解?談談你對執行緒的理解?2.程序的原因?如何解決程序

2.談談對程序的理解? 答:首先程序是指在系統中正在執行的一個應用程式;程式一旦執行就是程序,或者更專業化來說:程序是指程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的基本單位,程序

java試題---請用多執行緒寫

java面試題---用多執行緒寫死鎖 (請參考本部落格對同步鎖的文章進行理解) public class dead { public static void main(String[] args)

java試題產生的條件,以及如何避免,銀行家算法,產生死後如何解決(阿裏試題

需求量 info 強行 進程 spa tro 否則 破壞 阻塞 死鎖產生的四個必要條件: 互斥:一個資源每次只能被一個進程使用(資源獨立) 請求與保持:一個進程因請求資源而阻塞時,對已獲得的資源保持不放(不釋放鎖) 不剝奪:進程已獲得的資源,在未使用之前,

多線程試題系列(14):讀者寫者問題繼 讀寫SRWLock

線程面試題 oid out 讀者寫者問題 五個 lock val ref win7 在第十一篇文章中我們使用事件和一個記錄讀者個數的變量來解決讀者寫者問題。問題雖然得到了解決,但代碼有點復雜。本篇將介紹一種新方法——讀寫鎖SRWLock來解決這一問題。讀寫鎖在對資源進行保

.NET試題系列(十四)分布式

情況 png 過期 www. tro 守護線程 自動 17. alt 如何解決分布式鎖超時問題 我們可以讓獲得鎖的線程開啟一個守護線程,用來給快要過期的鎖“續航” 當過去了29秒,線程A還沒執行完,這時候守護線程會執行expire指令,為這把

試題之——樂觀和悲觀區別

對於樂觀鎖和悲觀鎖的區別及應用,要牢記一句話:讀取頻繁使用樂觀鎖,寫入頻繁使用悲觀鎖 本文轉自:https://blog.csdn.net/L_BestCoder/article/details/79298417 一、樂觀鎖(Optimistic Lock) 總是認為不會產生併發

自己實戰整理試題--(帶答案,不斷更新)

java有哪些鎖? Synchronized 和 ReentrantLock? 1、synchronized是重量級鎖? 從JDK 1.5 到 JDK 1.6 有一個高效併發方面的重要改進,HotSpot虛擬機器開發團隊在這個版本中花費了很大的精力去對Java中的鎖進行優化(synchr

試題】多執行緒在執行過程中,某個執行緒執行時,突然釋放。會發生的特殊狀態

一,背景 今天在刷面試題的時候,做到一道面試題,雖然看了答案,但有一個答案還是不理解。後來研究了一下,得到結論:執行緒拿到鎖進行執行時,哪怕獲得了CPU執行權,但是那個鎖不能丟失,它後面執行的過程都需要帶著鎖,才能往下繼續執行。 二,測試程式碼 /**

悲觀+G1收集器+幻讀+連線池+分散式架構 試題

一面 執行緒池有哪些引數?分別有什麼用?如果任務數超過的核心執行緒數,會發生什麼?阻塞佇列大小是多少? 資料庫連線池介紹下,底層實現說下 hashset底層實現,hashmap的put操作過程 說說HaspMap底層原理?再說說它跟HaspTable和Concurrent

Java試題--多執行緒併發&&jvm

一 多執行緒、併發、鎖 執行緒的生命週期,狀態是如何轉移的 NEW:A thread that has not yet started is in this state. RUNABLE: A thread executing in the Java vi

hibernate試題機制有什麼用?簡述Hibernate的悲觀和樂觀機制

有些業務邏輯在執行過程中要求對資料進行排他性的訪問,於是需要通過一些機制保證在此過程中資料被鎖住不會被外界修改,這就是所謂的鎖機制。 Hibernate支援悲觀鎖和樂觀鎖兩種鎖機制。悲觀鎖,顧名思義悲觀的認為在資料處理過程中極有可能存在修改資料的併發事務(包括本

Java常用試題15 synchronized方法的妙用 池和等待池的區別

問: 當一個執行緒進入一個物件的synchronized方法A之後,其它執行緒是否可進入此物件的synchronized方法B?  答: 不能。其它執行緒只能訪問該物件的非同步方法,同步方法則不能進入。因為非靜態方法上的synchronized修飾符要求執行方法時要獲得

GIL物件(全域性直譯器)[試題]

GIL鎖物件(全域性直譯器)[面試題] 描述Python 中GIL的概念, 以及它對python多執行緒的影響?編寫一個多執行緒抓取網頁的程式,並闡述多執行緒抓取程式是否比單執行緒單執行緒效能有提升,並解釋原因。 #1.多執行緒 #子執行緒死迴圈 import threadi

redis分散式實現-試題

1 加鎖(key自定義,value為uuid) Boolean setNX(byte[] key, byte[] value); 2 設定過期時間(key,timeout,unit) public Boolean expire(K key, final long t

多執行緒試題和答案:執行緒+執行緒池+執行緒同步

多執行緒面試題和答案:執行緒鎖+執行緒池+執行緒同步 1、併發程式設計三要素? 2、多執行緒的價值? 3、建立執行緒的有哪些方式?區別是什麼? 4、建立執行緒的三種方式的對比? 4、執行緒的生命週期及五種基本狀態及轉換條件 1、J