Kiểm tra tính khả tuần tự của lịch

Một phần của tài liệu (LUẬN văn THẠC sĩ) các thuật toán quản lý khóa chốt trong cơ sở dữ liệu phân tán (Trang 51 - 56)

3. Bố cục của luận văn

2.4. Kiểm tra tính khả tuần tự của lịch

Kết quả thực hiện hiện tương đương với một trật tự ma trận riêng rẽ với từng tiến trình.

 Mô hình 1: Chỉ xét các thao tác LOCK và UNLOCK. - Gọi S là lịch gồm các giao tác T1, T2, T3, ..., Tn

- Xét các thao tác có dạng LOCK và UNLOCK

- Nếu dòng i có 1 thao tác dạng UNLOCK, dòng j có thao thác tiếp theo sau đó có dạng LOCK thì ta vẽ một cung có hướng i → j

- Lịch thao tác khả tuần tự khi và chỉ khi đồ thì không có chu trình. Thí dụ: Cho lịch gồm 2 giao tác trên 4 đơn vị dữ liệu như sau:

a = T1 c b = T2 Xét từng đơn vị dữ liệu từ 1 đến 4 1: T1 2: T1  T2 3: T1 4: T2 1 L 2 2 L 4 2 L 4 1 U 2 1 L 2 2 L 2 1 L 1 1 U 2 2 U 4 1 L 3 2 L 2 2 L 1 1 U 3 2 U 4 2 U 2 1 U 1 1 L 1 2 U 1 1 L 3 1 U 3 1 U 1 2 L 1 2 U 2 2 U 1

Thuật toán được mô tả như sau:  Lập đồ thị có hướng G  Đỉnh là các giao tác

 Với mọi đơn vị dữ liệu e (T K e)  Nếu trong lịch xuất hiện 2 dòng i < j

- Dòng i: T UNLOCK e - Dòng j: T' LOCK e  T  T' thì nối cung T  T'

 Kiểm tra G ?

- G có chu trình: thông báo không khả tuần tự - G không có chu trình : Xuất trật tự topo.

- Xuất trật tự TOPO là sắp xếp theo công việc, việc nào nên làm trước, việc nào nên làm sau.

- Các công việc được đại diện bởi các đỉnh đồ thị. Đồ thị có cung từ x đến y nếu công việc x phải hoàn thành trước khi công việc y bắt đầu (chẳng hạn như khi giặt quần áo, việc giặt phải hoàn thành trước khi bắt đầu phơi khô). Khi đó, một thứ tự Tô Pô tương ứng với một thứ tự thực hiện các công việc.

=> Thuật toán :

Algorithm LichKhaTuanTu Input: Lich T

Output: true if T là kha tuan tu; false - ngoài ra.

begin

cc[i][j];// ma tran ke x, y; // cung x -> y bac[P]; // , bac cua dinh

for i = 1 to n do

if ( bac [i] == 0 ) then bac [i] == -1 return true

else return false endì// khong co dinh troc if (x== 0 && y ==0 ) then

c[x][y] = 1 ; ++ bac[y] ; // tang bac y if x= dinhtroc

if x = 0 return false endif; for y =1 to n do if cc[x][y] == 1 then { cc[x][y] == 0; --bac[y]; endif endLichKhaTuanTu

 Mô hình 2: Chỉ xét các thao tác RLOCK/ WLOCK và UNLOCK. - Gọi S là lịch gồm các giao tác T1, T2, T3, ..., Tn

- Xét các thao tác có dạng RLOCK/ WLOCK và UNLOCK

- Nếu dòng i có 1 thao tác dạng UNLOCK, dòng j có thao thác tiếp theo sau đó có dạng RLOCK/ WLOCK thì ta vẽ một cung có hướng i → j

- Lịch thao tác khả tuần tự khi và chỉ khi đồ thì không có chu trình. Thí dụ: Cho lịch gồm 2 giao tác trên 4 đơn vị dữ liệu như sau:

a = T1 c= T3 b = T2 Xét từng đơn vị dữ liệu từ 1 đến 4 1: T1 T2 T1  T4 2 : T2 3: T3  T1 4: T4  T3 1 WLOCK 1 2 WLOCK 3 3 WLOCK 2

1 WLOCK 2 2 UNLOCK 3 3 WLOCK 4 1 UNLOCK 1 2 WLOCK 4 3 UNLOCK 4 1 UNLOCK 2 2 WLOCK 1 3 UNLOCK 2 2 UNLOCK 4 3 WLOCK 3 2 UNLOCK 1 3 UNLOCK 3 2 WLOCK 3

 Lập đồ thị có hướng G  Đỉnh là các giao tác

 Với mọi đơn vị dữ liệu e (T K e)  Nếu trong lịch xuất hiện 2 dòng i < j

- Dòng i: T UNLOCK e

- Dòng j: T' RLOCK/ WLOCK e  T  T' thì nối cung T  T'

 Kiểm tra G ?

- G có chu trình: thông báo không khả tuần tự - G không có chu trình : Xuất trật tự topo.

Algorithm LichKhaTuanTu Input: Lich T

Output: true if T là kha tuan tu; false - ngoài ra.

begin

cc[i][j];// ma tran ke x, y; // cung x -> y bac[P]; // , bac cua dinh

for i = 1 to n do

if ( bac [i] == 0 ) then bac [i] == -1 return true

else return false endì// khong co dinh troc if (x== 0 && y ==0 ) then

c[x][y] = 1 ; ++ bac[y] ; // tang bac y if x= dinhtroc

if x = 0 return false endif; for y =1 to n do

if cc[x][y] == 1 then { cc[x][y] == 0; --bac[y];

endif

endLichKhaTuanTu

Một phần của tài liệu (LUẬN văn THẠC sĩ) các thuật toán quản lý khóa chốt trong cơ sở dữ liệu phân tán (Trang 51 - 56)

Tải bản đầy đủ (PDF)

(76 trang)