close
文章出處

數據庫中的two phase locking

兩段鎖協議是指每個事務的執行可以分為兩個階段:生長階段(加鎖階段)和衰退階段(解鎖階段)。
加鎖階段:在該階段可以進行加鎖操作。在對任何數據進行讀操作之前要申請并獲得S鎖,在進行寫操作之前要申請并獲得X鎖。加鎖不成功,則事務進入等待狀態,直到加鎖成功才繼續執行。
解鎖階段:當事務釋放了一個封鎖以后,事務進入解鎖階段,在該階段只能進行解鎖操作不能再進行加鎖操作。
兩段封鎖法可以這樣來實現:事務開始后就處于加鎖階段,一直到執行ROLLBACK和COMMIT之前都是加鎖階段。ROLLBACK和COMMIT使事務進入解鎖階段,即在ROLLBACK和COMMIT模塊中DBMS釋放所有封鎖。
 
概念
封鎖序列
 
 
兩段鎖協議是指所有事務必須分兩個階段對數據項加鎖和解鎖:
1. 在對任何數據進行讀、寫操作之前,要申請并獲得對該數據的封鎖。
2. 每個事務中,所有的封鎖請求先于所有的解鎖請求。
例如事務T1遵守兩段鎖協議,其封鎖序列是:
Lock A, Read A, A:=A+100, Write A, Lock B, Unlock A, Read B, Unlock B, Commit;[1] 
可以證明,若并發執行的所有事務均遵守兩段鎖協議,則對這些事務的任何并發調度策略都是可串行化的。
另外要注意兩段鎖協議和防止死鎖的一次封鎖法的異同之處。一次封鎖法要求每個事務必須一次將所有要使用的數據全部加鎖,否則就不能繼續執行,因此一次封鎖法遵守兩段鎖協議;但是兩段鎖協議并不要求事務必須一次將所有要使用的數據全部加鎖,因此遵守兩段鎖協議的事務可能發生死鎖。
 
SERIALIZABLE隔離級別可以一次將所有數據加鎖
 
 

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜

    AutoPoster 發表在 痞客邦 留言(0) 人氣()