首頁 >資料庫 >mysql教程 >在 DBMS 中使用鎖定進行並發控制

在 DBMS 中使用鎖定進行並發控制

王林
王林轉載
2023-09-02 13:57:02911瀏覽

在 DBMS 中使用锁进行并发控制

鎖定是 DBMS 中維護並發控制的一個組成部分。任何實現基於鎖的並發控制的系統中的事務在獲得所需的鎖之前都無法讀取或寫入語句。

基於鎖定的協定中有兩種類型的鎖。它們是:

  • 二進位鎖定 - 它們只能處於鎖定或解鎖兩種狀態之一。
  • 共用/獨佔鎖定 - 僅在執行讀取操作時取得共用鎖定。共享鎖可以在多個事務之間共享,因為沒有資料被更改。執行寫入操作時使用排它鎖。只有持有排它鎖的事務才允許更改資料值。

不同的鎖定協定是 -

簡單鎖定協定

在執行寫入作業之前,交易會獲得資料值上的鎖定。寫入操作完成後,就可以釋放鎖了。簡單鎖定協定的範例是:

##R (A) R(A)#鎖定(B)# R(B)W(B)已解鎖(B)#鎖定(C)R(C)#W(C)提交##提交
T1 #T2

解鎖(C)

#上面顯示了兩筆交易T1和T2。讀取操作不需要鎖,但在寫入操作之前,每個交易都會取得鎖定並在之後釋放鎖定。

兩階段鎖定協定

兩階段鎖定協定有兩個階段,分別是成長階段和縮小階段。事務只有在成長階段才能取得鎖。當進入收縮階段時,它可以釋放先前取得的鎖,但無法取得新的鎖。排它鎖由 X 表示,共享鎖以 S 表示。兩階段鎖定協定的範例是-T1#T2 tr>
##S (A)

R(A)

S(A)

R(A)
X(B)

#R(B)

#W(B)

X(C)

#R(C)

W(C)

#(C)

##已解鎖(A)

#已解鎖(B)

##已解鎖(A)

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 )

######## ###########已解鎖(B)############### #################### #提交##################### ###Unlock(C)############

在上面的範例中,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)

######在上面的例子中,T1和T2使用共享鎖共享變數A,因為對A只執行讀取操作. T1 在B 上獲取排他鎖進行寫入操作,T2 在C 上進行同樣的操作。共享鎖和排它鎖都只有在事務提交後才會釋放。 ###

以上是在 DBMS 中使用鎖定進行並發控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除