矩陣如下:
請(qǐng)求的模式 | IS | S | U | IX | SIX | X |
---|---|---|---|---|---|---|
意向共享 (IS) | 是 | 是 | 是 | 是 | 是 | 否 |
共享 (S) | 是 | 是 | 是 | 否 | 否 | 否 |
更新 (U) | 是 | 是 | 否 | 否 | 否 | 否 |
意向排他 (IX) | 是 | 否 | 否 | 是 | 否 | 否 |
意向排他共享 (SIX) | 是 | 否 | 否 | 否 | 否 | 否 |
排他 (X) | 否 | 否 | 否 | 否 | 否 | 否 |
首先要明確下面的結(jié)論
- 1.這個(gè)矩陣表示 兩個(gè)事務(wù)T1 T2是否可以 同時(shí) 對(duì)同一個(gè)對(duì)象加指定的鎖憔鬼。
- 2.對(duì)于SIX=S+IX鎖的理解圾另,雖然兩個(gè)不同事務(wù)是不允許同時(shí)向同一對(duì)象加S侥猬,IX鎖的碧浊。但是在一個(gè)事務(wù)中是可以即加S鎖又加IX鎖的的赶么。因?yàn)殒i就是保護(hù)事務(wù)并發(fā)的正確性懦胞,讀和寫兩種命令在一個(gè)事務(wù)里就不存在并發(fā)的幾種錯(cuò)誤情況镜悉。但看一個(gè)事務(wù)就不需要考慮并發(fā)。理論上可以在一個(gè)事務(wù)里對(duì)同一對(duì)象又加S鎖又加X(jué)鎖医瘫,但根本沒(méi)這個(gè)必要侣肄。
- T1加S鎖,表示數(shù)據(jù)的子節(jié)點(diǎn)都是隱式的加了 S 鎖
- T2 加 S 相容 都是讀鎖
- T2 加 IS 相容 都是讀鎖
- T2 加 IX 醇份,不相容稼锅, IX 對(duì)子節(jié)點(diǎn) 意向 加 X 鎖(邏輯上可能不會(huì)對(duì)子節(jié)點(diǎn)加 X ,但是只要這個(gè)可能性存在就要保證正確性) 僚纷,和 S 鎖沖突
- T2 加 SIX, 不相容矩距, 同 上面加 IX
- T2 加 X , 不相容怖竭, S 和 X 沖突
- T1加X(jué)鎖锥债,
- T2只能干等著。因?yàn)閄鎖排他痊臭,優(yōu)先級(jí)最高
- T1加IS鎖
- T2不能加X(jué)鎖哮肚。因?yàn)門1有對(duì)其子節(jié)點(diǎn)加S鎖的可能而T2扼殺了這個(gè)可能性。
- T2 加 IX鎖 相容 是因?yàn)镮鎖只是意向鎖广匙,所以是可行的允趟,若事務(wù)有非意向鎖,根據(jù)相容矩陣再次判定鸦致。SIX鎖綜上同理潮剪。
- T1加IX鎖涣楷,
- T2不能加S,X抗碰,SIX鎖的原因不再贅述狮斗。(不能加SIX鎖的原因,可參考不能加S鎖)
- T1加SIX鎖弧蝇,
- T2只能加IS鎖情龄。不能加S,X捍壤,IX,SIX鎖的原因分別是:
- T2 加 S 不相容鞍爱,T1無(wú)法完成SIX鎖的IX部分
- T2 加 X 不相容鹃觉,T1首先就無(wú)法完成S鎖,更別說(shuō)SIX鎖
- T2 加 IX 不相容睹逃,表示T2意向修改對(duì)象子節(jié)點(diǎn)盗扇,而T1要讀對(duì)象,若T2修改其子節(jié)點(diǎn)便產(chǎn)生并發(fā)錯(cuò)誤沉填。故pass
- T2 加 SIX 不相容疗隶,綜合上面S和IX的情況。pass