基本的封鎖類型有兩種:排它鎖(X鎖)和共享鎖(S鎖).所謂X鎖,是事務T對數據A加上X鎖時,只容許事務T讀取和修改數據A,...所謂S鎖,是事務T對數據A加上S鎖時,其餘事務只能再對數據A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。 若事務T對數據對象A加了S鎖,則T就能夠對A進行讀取,但不能進行更新(S鎖所以又稱爲讀鎖),在T釋放A上的S鎖之前,其餘事務能夠再對A加S鎖,但不能加X鎖,從而能夠讀取A,但不能更新A.
兩段鎖協議:數據庫
數據庫的兩段鎖協議是指全部事務必須分兩個階段對數據項進行加鎖和解鎖併發
1.擴展階段ide
在對任何數據項的讀、寫以前,要申請並得到該數據項的封鎖。spa
2.收縮階段對象
每一個事務中,全部的封鎖請求必須先於解鎖請求。事務
例如:事務T遵循兩段鎖協議,其封鎖協議爲:it
BEGIN TRANSACTION;class
LOCK(A);READ A; A := A + 100; WRITE A; LOCK(B); UNLOCK(A); READ(B), UNLOCK(B),;擴展
COMMIT; 請求
能夠證實:若併發執行的全部事務均遵照兩段鎖協議,則對這些並行事務的任何並行調度策略都是可串行化
須要說明的是,併發執行的全部事務若均遵照兩段鎖協議,只是這些事務的並行調度策略能可串行化的充分條件,不是必要條件。
兩段鎖協議與防止死鎖的一次封鎖法的區別:
一次封鎖法要求事務必須一次對全部要使用到的數據項進行加鎖,不然不能繼續運行。
顯然,一次封鎖法符合兩段鎖協議,可是兩段鎖協議並不要求一次就要對全部須要用到的數據項進行加鎖,所以遵照兩段鎖協議的事務有可能死鎖