鎖定是 DBMS 中維護並發控制的一個組成部分。任何實現基於鎖的並發控制的系統中的事務在獲得所需的鎖之前都無法讀取或寫入語句。
基於鎖定的協定中有兩種類型的鎖。它們是:
不同的鎖定協定是 -
在執行寫入作業之前,交易會獲得資料值上的鎖定。寫入操作完成後,就可以釋放鎖了。簡單鎖定協定的範例是:
##R (A) R(A)#鎖定(B)# R(B)W(B)已解鎖(B)#鎖定(C)R(C)#W(C)提交##提交T1 | #T2 |
---|---|
解鎖(C) |
|
##S (A) | |
R(A) | |
S(A) | |
R(A) | |
X(B) | |
#R(B) | |
#W(B) | |
X(C) | |
#R(C) | |
W(C) | |
#(C) | |
##已解鎖(A) | |
#已解鎖(B) | |
tr> #提交嚴格兩相鎖定協定與兩相鎖定協定類似。唯一的區別是,在嚴格的 2PL 協議中,協議獲取的所有排他鎖都需要保留,直到協議提交或中止。嚴格兩階段鎖定協定的範例是:T1T2 S(A)S(A)R(A) X(B)#R(B)#W(B)X(C)#R(C)W(C)#(A)已解鎖(A)
在上面的範例中, T1和T2使用共享變數A共享鎖,因為在A 上只執行讀取操作。 T1 為寫入作業取得 B 上的排他鎖,並很快釋放它。 T2與C的做法相同。 嚴格兩相鎖定協定 |
|
R(A ) | |
在上面的範例中,T1和T2使用共享鎖共享變數A,因為對A只執行讀取操作T1 為寫入操作取得 B 上的排它鎖,T2 為 C 取得排它鎖。只有在事務提交後才會釋放排它鎖。然而,共享鎖則沒有這樣的限制。
嚴格兩階段鎖定協定只是兩階段鎖定協定和嚴格兩階段鎖定協定的擴充。鎖定協定。在這裡,事務持有的所有鎖,無論是共享的還是獨佔的,只有在事務提交或中止時才會釋放。嚴格兩階段鎖定協定的範例是:
tr>#提交已解鎖(A)Unlock(C)T1 | T2 |
---|---|
S(A) | |
R(A ) | |
S(A) | |
R(A ) | |
X(B) | |
R(B) | |
W(B) | |
X(C) | |
#R(C) | |
W(C) | |
#提交 | |
解鎖(A) | |
# 解鎖(B) | |
以上是在 DBMS 中使用鎖定進行並發控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!