鎖是 DBMS 中維護并發控制的一個組成部分。任何實現基于鎖的并發控制的系統中的事務在獲得所需的鎖之前都無法讀取或寫入語句。
基于鎖的協議中有兩種類型的鎖。它們是:
- 二進制鎖 – 它們只能處于鎖定或解鎖兩種狀態之一。共享/獨占鎖 – 僅在執行讀操作時獲取共享鎖。共享鎖可以在多個事務之間共享,因為沒有數據被更改。執行寫操作時使用排它鎖。只有持有排它鎖的事務才允許更改數據值。
不同的鎖定協議是 –
簡單鎖定協議
在執行寫操作之前,事務會獲得數據值上的鎖。寫操作完成后,就可以釋放鎖了。簡單鎖定協議的一個示例是:
T1 | T2 |
---|---|
R(A) | |
R(A) | |
鎖定(B) | |
R(B) | |
W(B) | |
解鎖(B) | |
鎖定(C) | |
R(C) | |
W(C) | |
解鎖(C) | |
提交 | |
提交 |
上面顯示了兩個事務T1和T2。讀操作不需要鎖,但在寫操作之前,每個事務都會獲取鎖并在之后釋放鎖。
兩階段鎖定協議
兩階段鎖定協議有兩個階段,即增長階段和收縮階段。事務只有在增長階段才能獲取鎖。當進入收縮階段時,它可以釋放之前獲取的鎖,但無法獲取新的鎖。排它鎖由 X 表示,共享鎖由 S 表示。兩階段鎖定協議的示例是 –
T1 | T2 |
---|---|
S(A) | |
R(A) | |
S(A) | |
R(A) | |
X(B) | |
R(B) | |
W(B) | |
X(C) | |
R(C) | |
W(C) | |
解鎖(C) | |
解鎖(A) | |
解鎖(B) | |
解鎖(A) | |
提交 | |
提交 |
在上面的示例中,T1和T2使用共享變量A共享鎖,因為在 A 上只執行讀操作。T1 為寫操作獲取 B 上的排他鎖,并很快釋放它。 T2與C的做法相同。
嚴格兩相鎖定協議
嚴格兩相鎖定協議與兩相鎖定協議類似。唯一的區別是,在嚴格的 2PL 協議中,協議獲取的所有排他鎖都需要保留,直到協議提交或中止。嚴格兩階段鎖定協議的示例是:
T1 | T2 |
---|---|
S(A) | |
R(A ) | |
S(A) | |
R(A) | |
X(B) | |
R(B) | |
W(B) | |
X(C) | |
R(C) | |
W(C) | |
解鎖(A) | |
解鎖(A) | |
提交 | |
解鎖(B) | |
提交 | |
Unlock(C) |
在上面的例子中,T1和T2使用共享鎖共享變量A,因為對A只執行讀操作T1 為寫操作獲取 B 上的排它鎖,T2 為 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) | |
提交 | |
解鎖(A) | |
Unlock(C) |
在上面的例子中,T1和T2使用共享鎖共享變量A,因為對A只執行讀操作. T1 在 B 上獲取排他鎖進行寫操作,T2 在 C 上進行同樣的操作。共享鎖和排它鎖都只有在事務提交后才會釋放。
以上就是在 DBMS 中使用鎖進行并發控制的詳細內容,更多請關注www.92cms.cn其它相關文章!