db2什么是死鎖
DB2是IBM出品的一系列關(guān)系型數(shù)據(jù)庫管理系統(tǒng),分別在不同的操作系統(tǒng)平臺上服務。雖然DB2產(chǎn)品是基于UNIX的系統(tǒng)和個人計算機操作系統(tǒng),但在基于UNIX系統(tǒng)和微軟在windows系統(tǒng)下的Access方面,DB2追尋了ORACLE的數(shù)據(jù)庫產(chǎn)品。
死鎖(Deadlock),這里指的是進程死鎖,是個計算機技術(shù)名詞。它是操作系統(tǒng)或軟件運行的一種狀態(tài):在多任務系統(tǒng)下,當一個或多個進程等待系統(tǒng)資源,而資源又被進程本身或其它進程占用時,就形成了死鎖。由于資源占用是互斥的,當某個進程提出申請資源后,使得有關(guān)進程在無外力協(xié)助下,永遠分配不到必需的資源而無法繼續(xù)運行,這就產(chǎn)生了一種特殊現(xiàn)象。
死鎖的規(guī)范定義:集合中的每一個進程都在等待只能由本集合中的其他進程才能引發(fā)的事件,那么該組進程是死鎖的。
一種情形,此時執(zhí)行程序中兩個或多個線程發(fā)生永久堵塞(等待),每個線程都在等待被其他線程占用并堵塞了的資源。例如,如果線程A鎖住了記錄1并等待記錄2,而線程B鎖住了記錄2并等待記錄1,這樣兩個線程就發(fā)生了死鎖現(xiàn)象。
計算機系統(tǒng)中,如果系統(tǒng)的資源分配策略不當,更常見的可能是程序員寫的程序有錯誤等,則會導致進程因競爭資源不當而產(chǎn)生死鎖的現(xiàn)象。
在兩個或多個任務中,如果每個任務鎖定了其他任務試圖鎖定的資源,此時會造成這些任務永久阻塞,從而出現(xiàn)死鎖。例如:事務A獲取了行1的共享鎖。事務B獲取了行2的共享鎖。
現(xiàn)在,事務A請求行2的排他鎖,但在事務B完成并釋放其對行2持有的共享鎖之前被阻塞。
現(xiàn)在,事務B請求行1的排他鎖,但在事務A完成并釋放其對行1持有的共享鎖之前被阻塞。
事務B完成之后事務A才能完成,但是事務B由事務A阻塞。該條件也稱為循環(huán)依賴關(guān)系:事務A依賴于事務B,事務B通過對事務A的依賴關(guān)系關(guān)閉循環(huán)。
除非某個外部進程斷開死鎖,否則死鎖中的兩個事務都將無限期等待下去。MicrosoftSQLServer數(shù)據(jù)庫引擎死鎖監(jiān)視器定期檢查陷入死鎖的任務。如果監(jiān)視器檢測到循環(huán)依賴關(guān)系,將選擇其中一個任務作為犧牲品,然后終止其事務并提示錯誤。這樣,其他任務就可以完成其事務。對于事務以錯誤終止的應用程序,它還可以重試該事務,但通常要等到與它一起陷入死鎖的其他事務完成后執(zhí)行。
在應用程序中使用特定編碼約定可以減少應用程序?qū)е滤梨i的機會。有關(guān)詳細信息,請參閱將死鎖減至最少。
死鎖經(jīng)常與正常阻塞混淆。事務請求被其他事務鎖定的資源的鎖時,發(fā)出請求的事務一直等到該鎖被釋放。默認情況下,除非設置了LOCK_TIMEOUT,否則SQLServer事務不會超時。因為發(fā)出請求的事務未執(zhí)行任何操作來阻塞擁有鎖的事務,所以該事務是被阻塞,而不是陷入了死鎖。最后,擁有鎖的事務將完成并釋放鎖,然后發(fā)出請求底事務將獲取鎖并繼續(xù)執(zhí)行。
db2什么是死鎖
上一篇:c語言中什么是主函數(shù)
下一篇:excel表格什么是宏