序列化圖用於測試計劃的可序列化。
假設一個時間表S,對於S,我們構造一個稱為優先圖的圖。 該圖有一對G =(V,E)
,其中V
由一組頂點組成,E
由一組邊組成。 頂點集用於包含參與計劃的所有事務。 該組邊用於包含三個條件之一所有的所有邊Ti - > Tj
:
如果Ti
在Tj
執行讀取(Q)之前執行寫入(Q),則建立節點Ti→Tj
。
如果Ti
在Tj
執行寫入(Q)之前執行讀取(Q),則建立節點Ti→Tj
。
如果Ti
在Tj
執行寫入(Q)之前執行寫入(Q),則建立節點Ti→Tj
。
排程S的優先順序圖:
Ti→Tj
,則在執行Tj
的第一個指令之前執行Ti
的所有指令。範例
說明:
Read(A):在T1中,沒有後續寫入A,因此沒有新的邊界。
Read(B):在T2中,沒有後續寫入B,因此沒有新的邊界。
Read(C):在T3中,沒有後續寫入C,因此沒有新的邊界。
Write(B):隨後通過T3讀取B,因此新增邊沿T2→T3
。
Write(C):隨後通過T1讀取C,因此新增邊沿T3→T1
。
Write(A):隨後由T2讀取A,因此新增邊沿T1→T2
。
Write(A):在T2中,沒有後續讀到A,所以沒有新的界。
Write(C):在T1中,沒有後續讀到C,所以沒有新的界。
Write(B):在T3中,沒有後續讀到B,所以沒有新的界。
排程S1的優先順序圖:
排程S1的優先順序圖包含一個迴圈,這就是排程S1不可序列化的原因。
說明:
Read(A):在T4中,沒有後續寫入A,因此沒有新的邊界。
Read(C):在T4中,沒有後續寫入C,因此沒有新的邊界。
Write(A):隨後由T5讀取A,因此新增邊T4→T5
Read(B):在T5中,沒有後續寫入B,因此沒有新的邊界。
Write(C):隨後由T6讀取C,因此新增邊T4→T6
Write(B):隨後由T6讀取A,因此新增邊T5→T6
Write(C):在T6中,沒有後續讀到C,所以沒有新的邊界。
Write(A):在T5中,沒有後續讀到A,所以沒有新的邊界。
Write(B):在T6中,沒有後續讀到B,所以沒有新的邊界。
排程S2的優先順序圖:
排程S2的優先順序圖不包含迴圈,這就是排程S2可序列化的原因。