1.概念
為了描述一個程序的各部分(程序段或語句)間的依賴關系,或者是一個大的計算的各個子任務間的因果關系,我們常常采用前趨圖方式。前趨圖中的每個結點可以表示一條語句、一個程序段或一個進程,結點間的有向邊表示兩個結點之間存在的偏序(Partial Order)或前趨關系(Precedence Relation)“→”。
2.沖突可串行化簡介
a.可串行化調度
多個事務的並發執行是正確的,當且僅當其結果與按某一次序串行執行這些事務時的結果相同,稱這種調度策略為可串行化調度。
可串行性是並發事務正確調度的准則。
b.沖突可串行化調度
一個調度S在保證沖突操作的次序不變的情況下,通過交換兩個事物不沖突操作的次序得到另一個調度S',如果S'是串行的,稱調度S為沖突可串行化的調度。
c.沖突操作
不同的事務對同一數據的讀寫操作和寫寫操作。
同一事務的兩個動作沖突:ri(X);wi(X),
不同事務對同一數據庫元素的寫沖突:wj(X);wi(X),
不同事務對同一數據庫元素的讀和寫沖突:ri(X);wj(X),
這些都是沖突操作:r1(A) w1(A), r1(A) w2(A) , w2(A) r1(A) , w1(A) w2(A)
3.前趨圖畫法
節點: S中的事務
弧: Ti ->Tj whenever
- pi(A),qj(A) 涉及同一數據庫元素
- pi(A)<qj(A)(這里指的是調度的先后順序)
- pi, qj 至少一個是寫動作
4.判斷是否沖突可串行化
如果存在環, S 不是沖突可串行的, 否則, S 是沖突可串行的
5.舉個栗子
例如S=r1(A)w1(A)r2(A)w2(A)r1(B)w1(B)r2(B)w2(B)
其中w1(A)r2(A)得出T1 ->T2 ,w1(B)r2(B)得出T1 ->T2
無環,故S是可串行調度
6.再舉一個
S1=r2(A)r1(B)w2(A)r2(B)r3(A)w1(B)w3(A)W2(B)
r2(A)w3(A)得出T2->T3
r1(B)W2(B)得出T1 ->T2
r2(B)w1(B)得出T2 ->T1
有環,故S1 不是沖突可串行化的
本文轉載自-》鏈接:https://blog.csdn.net/fmc201314/article/details/53872704