9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦 > 知識大全 > 知識百科 > 百科知識 > 什么是死鎖有什么處理及排除方法

什么是死鎖有什么處理及排除方法

時間: 謝君787 分享

什么是死鎖有什么處理及排除方法

  死鎖是指兩個或兩個以上的進程在執行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現象,那么你對死鎖了解多少呢?以下是由學習啦小編整理關于什么是死鎖,希望大家喜歡!

  死鎖的定義

  死鎖的規范定義:集合中的每一個進程都在等待只能由本集合中的其他進程才能引發的事件,那么該組進程是死鎖的。

  一種情形,此時執行程序中兩個或多個線程發生永久堵塞(等待),每個線程都在等待被其他線程占用并堵塞了的資源。例如,如果線程A鎖住了記錄1并等待記錄2,而線程B鎖住了記錄2并等待記錄1,這樣兩個線程就發生了死鎖現象。

  計算機系統中,如果系統的資源分配策略不當,更常見的可能是程序員寫的程序有錯誤等,則會導致進程因競爭資源不當而產生死鎖的現象。

  在兩個或多個任務中,如果每個任務鎖定了其他任務試圖鎖定的資源,此時會造成這些任務永久阻塞,從而出現死鎖。例如:事務A 獲取了行 1 的共享鎖。事務 B 獲取了行 2 的共享鎖。

  排他鎖,等待事務 B 完成并釋放其對行 2 持有的共享鎖之前被阻塞。

  排他鎖,等待事務 A 完成并釋放其對行 1 持有的共享鎖之前被阻塞。

  事務 B 完成之后事務 A 才能完成,但是事務 B 由事務 A 阻塞。該條件也稱為循環依賴關系:事務 A 依賴于事務 B,事務 B 通過對事務 A 的依賴關系關閉循環。

  除非某個外部進程斷開死鎖,否則死鎖中的兩個事務都將無限期等待下去。Microsoft SQL Server 數據庫引擎死鎖監視器定期檢查陷入死鎖的任務。如果監視器檢測到循環依賴關系,將選擇其中一個任務作為犧牲品,然后終止其事務并提示錯誤。這樣,其他任務就可以完成其事務。對于事務以錯誤終止的應用程序,它還可以重試該事務,但通常要等到與它一起陷入死鎖的其他事務完成后執行。

  在應用程序中使用特定編碼約定可以減少應用程序導致死鎖的機會。有關詳細信息,請參閱將死鎖減至最少。

  死鎖經常與正常阻塞混淆。事務請求被其他事務鎖定的資源的鎖時,發出請求的事務一直等到該鎖被釋放。默認情況下,除非設置了 LOCK_TIMEOUT,否則 SQL Server 事務不會超時。因為發出請求的事務未執行任何操作來阻塞擁有鎖的事務,所以該事務是被阻塞,而不是陷入了死鎖。最后,擁有鎖的事務將完成并釋放鎖,然后發出請求底事務將獲取鎖并繼續執行。

  死鎖有時稱為抱死。

  不只是關系數據庫管理系統,任何多線程系統上都會發生死鎖,并且對于數據庫對象的鎖之外的資源也會發生死鎖。例如,多線程操作系統中的一個線程要獲取一個或多個資源(例如,內存塊)。如果要獲取的資源當前為另一線程所擁有,則第一個線程可能必須等待擁有線程釋放目標資源。這就是說,對于該特定資源,等待線程依賴于擁有線程。在數據庫引擎實例中,當獲取非數據庫資源(例如,內存或線程)時,會話會死鎖。

  在示例中,對于 Part表鎖資源,事務 T1 依賴于事務 T2。同樣,對于 Supplier表鎖資源,事務 T2 依賴于事務 T1。因為這些依賴關系形成了一個循環,所以在事務 T1 和事務 T2 之間存在死鎖。

  當表進行了分區并且 ALTER TABLE 的 LOCK_ESCALATION 設置設為 AUTO 時也會發生死鎖。當 LOCK_ESCALATION 設為 AUTO 時,通過允許數據庫引擎在 HoBT 級別而不是 TABLE 級別鎖定表分區會增加并發情況。但是,當單獨的事務在某個表中持有分區鎖并希望在其他事務分區上的某處持有鎖時,會導致發生死鎖。通過將 LOCK_ESCALATION 設為 TABLE 可以避免這種類型的死鎖,但此設置會因強制某個分區的大量更新以等待某個表鎖而減少并發情況。

  死鎖產生條件

  雖然進程在運行過程中,可能發生死鎖,但死鎖的發生也必須具備一定的條件,死鎖的發生必須具備以下四個必要條件。

  1)互斥條件:指進程對所分配到的資源進行排它性使用,即在一段時間內某資源只由一個進程占用。如果此時還有其它進程請求資源,則請求者只能等待,直至占有資源的進程用畢釋放。

  2)請求和保持條件:指進程已經保持至少一個資源,但又提出了新的資源請求,而該資源已被其它進程占有,此時請求進程阻塞,但又對自己已獲得的其它資源保持不放。

  3)不剝奪條件:指進程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時由自己釋放。

  4)環路等待條件:指在發生死鎖時,必然存在一個進程——資源的環形鏈,即進程集合{P0,P1,P2,···,Pn}中的P0正在等待一個P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。

  死鎖產生原因

  1)競爭資源引起進程死鎖

  當系統中供多個進程共享的資源如打印機、公用隊列的等,其數目不足以滿足諸進程的需要時,會引起諸進程對資源的競爭而產生死鎖。

  2)可剝奪資源和不可剝奪資源

  系統中的資源可以分為兩類,一類是可剝奪資源,是指某進程在獲得這類資源后,該資源可以再被其他進程或系統剝奪。例如,優先權高的進程可以剝奪優先權低的進程的處理機。又如,內存區可由存儲器管理程序,把一個進程從一個存儲區移到另一個存儲區,此即剝奪了該進程原來占有的存儲區,甚至可將一進程從內存調到外存上,可見,CPU和主存均屬于可剝奪性資源。另一類資源是不可剝奪資源,當系統把這類資源分配給某進程后,再不能強行收回,只能在進程用完后自行釋放,如磁帶機、打印機等。

  3)競爭不可剝奪資源

  在系統中所配置的不可剝奪資源,由于它們的數量不能滿足諸進程運行的需要,會使進程在運行過程中,因爭奪這些資源而陷于僵局。例如,系統中只有一臺打印機R1和一臺磁帶機R2,可供進程P1和P2共享。假定PI已占用了打印機R1,P2已占用了磁帶機R2,若P2繼續要求打印機R1,P2將阻塞;P1若又要求磁帶機,P1也將阻塞。于是,在P1和P2之間就形成了僵局,兩個進程都在等待對方釋放自己所需要的資源,但是它們又都因不能繼續獲得自己所需要的資源而不能繼續推進,從而也不能釋放自己所占有的資源,以致進入死鎖狀態。

>>>下一頁更多有關“死鎖產生原因”內容

1478393 主站蜘蛛池模板: 欧美黑人性暴力猛交在线视频 | 色一伊人区二区亚洲最大| 免费av网站| 国产高清在线男人的天堂| 国产剧情视频一区二区麻豆| 久久99日韩国产精品久久99| www成人国产高清内射| 伊人久久大香线蕉AV网禁呦| 最新的精品亚洲一区二区| 国产女人看国产在线女人| 国产一区二区亚洲精品| 日韩国产av一区二区三区精品| 鲁丝一区鲁丝二区鲁丝三区| 国产成人久久精品流白浆| 在线a级毛片无码免费真人| 自拍偷拍视频一区二区三区 | 亚洲中文字幕精品第三区| 国产三级黄色片在线观看| 花式道具play高h文调教| 亚洲国产成人字幕久久 | 国产精品论一区二区三区| 国产成人精品永久免费视频| jizz国产免费观看| 精品中文字幕一区在线| 日韩AV高清在线看片| 制服 丝袜 亚洲 中文 综合| 国产精品视频不卡一区二区| 中文字幕在线无码一区二区三区| 无码一区二区三区久久精品| 在线无码免费看黄网站| 国产精品流白浆无遮挡| 亚洲免费的福利片| 国产欧美在线一区二区三| 视频二区中文字幕在线| 午夜成人无码免费看网站| 精品人妻av综合一区二区| 亚洲av噜噜一区二区| 久久人妻国产精品| 久久天天躁狠狠躁夜夜躁2012| 亚洲国产日韩欧美一区二区三区| 国产精品鲁鲁鲁|