數據庫鎖的相容性矩陣


把自己的知乎答案搬來了

從多粒度樹的角度着手理解。

在多粒度封鎖中,若對一個節點加鎖(X、S),意味着這個點的后裔節點也被加以同樣的鎖。若對一個節點加意向鎖,則說明正在對其子節點加(對應的)鎖(可理解為一個事務中的先后次序)。任意節點加(X,S)鎖時,必須對其所有上級節點加意向鎖。多粒度封鎖的加鎖順序是自頂向下,釋放鎖的順序是自下而上。

上級節點加的意向鎖不影響當前節點和其子節點上鎖的相容性。

設有事務AB,都對同一數據對象r加鎖。

X鎖排他,故只要A對r加X鎖,B不能再對r及其子節點加鎖。

S鎖,若A對r加S鎖,則r及其子節點均加S鎖,故r及其子節點不能加X鎖。也就是說B不能對r加X,IX,SIX這些包含X的鎖。

IX鎖,若A對r加IX鎖,則r到該節點路徑上的節點全加IX鎖,該節點及其子節點全加X鎖。為了保證加了X鎖的那個子節點上面不加其他的鎖,故B一定不能對r加X,S,SIX鎖。而至於IS,IX鎖,B是可以對r加的,因為要加X,S鎖的那個節點可能不同。若要加鎖的節點相同則再用X,S鎖的相容矩陣解釋沖突。

SIX鎖,若A對r加SIX鎖,對則r先加了S鎖,釋放后再加IX鎖(一次操作中的先后次序),r的子節點分別對應加鎖。故B不能對r加{X,SIX,IX鎖}並上{X,S,SIX鎖}。

IS鎖,若A對r加IS鎖,那么r到要加S鎖的節點路徑上的節點全加IS鎖,該節點及其子節點全加S鎖。故B不能對其加X鎖。至於IX,SIX鎖是可以加的,因為對應要加鎖的子節點可能不同,相同時再按X,S鎖的相容矩陣判別即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM