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