Có một thuật toán đơn giản để xác định tính sắp thứ tự xung đột của một lịch biểu. Phần lớn các phương pháp kiểm soát đồng thời không kiểm tra đối với tính sắp được thứ tự. Thuật toán này chỉ nhằm làm hiểu hơn về các giao thức điều khiển đồng thời.
Thuật toán 5.1 có thể được sử dụng để kiểm tra một lịch biểu đối với tính có thể sắp thứ tự xung đột. Thuật toán chỉ chú ý đến các thao tác read_item và write_item trong một lịch biểu để xây dựng một đồ thị ưu tiên (hoặc một đồ thị sắp thứ tự), đó là một đồ thị có hướng G=(N,E) gồm tập các đỉnh N={T1.T2,….,Tn} và tập các cạnh có hướng E={e1,e2,…,en}. Có một đỉnh trong đồ thị cho một giao tác Ti trong lịch biểu. Mỗi cạnh ei trong đồ thị có dạng (Tj Tk), 1 <= j <= n , 1 <= k <= n , trong đó Tj là đỉnh đầu của ei và Tk là đỉnh cuối của cạnh ei . Một cạnh như vậy sẽ được tạo ra nếu một trong các thao tác trong Tj xuất hiện trong lịch biểu trước một số thao tác xung đột trong Tk [1].
Thuật toán 5.1 Kiểm tra tính sắp thứ tự xung đột của một lịch biểu S [1]
1. Đối với mỗi giao tác Ti tham gia trong lịch biểu S tạo một đỉnh có nhãn là Ti trong đồ thị ưu tiên
2. Với mỗi trường hợp trong S ở đó Tj thực hiện một thao tác read_item(X) sau khi Ti thực hiện một thao tác write_item(X) thì tạo ra một cạnh (Ti Tj) trong đồ thì ưu tiên
3. Với mỗi trường hợp trong S, ở đó Tj thực hiện một thao tác write_item(X) sau khi Ti thực hiện một thao tác read_item(X) thì tạo ra một cạnh (Ti Tj) trong đồ thị ưu tiên
4. Với mỗi trường hợp trong S, ở đó Tj thực hiện một thao tác write_item(X) sau khi Ti thực hiện một thao tác write_item(X) thì tạo ra một cạnh (Ti Tj) trong đồ thị ưu tiên
5. Lịch biểu S là sắp thứ tự được khi và chỉ khi đồ thị ưu tiên không có chu trình
Đồ thị ưu tiên được xây dựng như miêu tả trong thuật toán 1.1 Nếu có một chu trình trong đồ thị ưu tiên, lịch biểu S là không sắp thứ tự được (xung đột) nếu không có chu trình thì S là sắp thứ tự được.
Trong đồ thị ưu tiên, một cạnh từ Ti tới Tj có nghĩa là giao tác Ti phải xuất hiện trước giao tác Tj trong bất kỳ lịch biểu có thứ tự tương đương với S bởi vì hai thao tác xung đột xuất hiện trong một lịch biểu theo thứ tự đó. Nếu không có chu trình trong đồ thị ưu tiên, chúng ta có thể tạo ra một lịch biểu có thứ tự tương đương S’ tương đương với S bằng cách sắp xếp các giao tác tham gia trong S như sau: khi một cạnh tồn tại trong đồ thị ưu tiên từ Ti tới Tj, Ti phải xuất hiện trước Tj trong lịch biểu theo thứ tự tương đương S’. Chú ý rằng các cạnh (Ti Tj) trong đồ thị ưu tiên có thể được đánh nhãn bởi tên của mục dữ liệu dẫn đến việc tạo nên cạnh.
T1 a) T2 T1 b) T2 X X X c) d) T1 T2 T1 T2 X X
Hình 1.7 Xây dựng đồ thị ưu tiên đối với các lịch biểu A tới D từ hình 1.5 để kiểm tra thứ tự xung đột
(a)Đồ thị ưu tiên đối với lịch biểu theo thứ tự A (b)Đồ thị ưu tiên đối với lịch biểu theo thứ tự B
(d)Đồ thị ưu tiên đối với lịch biểu D (theo thứ tự xung đột, tương đương với lịch biểu A)
Nói chung, nhiều lịch biểu có thứ tự tương đương với lịch biểu S nếu đồ thị ưu tiên cho S không có chu trình. Tuy nhiên, nếu đồ thị ưu tiên có một chu trình, thì dễ dàng chỉ ra rằng chúng ta không thể tạo ra bất kỳ một lịch biểu có thứ tự tương đương, và như vậy S là không sắp thứ tự được. Các đồ thị ưu tiên được tạo ra cho các lịch biểu từ A đến D, được minh hoạ bằng hình vẽ ở trên. Đồ thị cho lịch biểu C có một chu trình, như vậy nó không phải là sắp thứ tự được. Đồ thị cho lịch biểu D không có chu trình, và lịch biểu có thứ tự tương đương là T1 theo sau là T2. Các đồ thị cho lịch biểu A và B không có chu trình bởi vì các lịch biểu là có thứ tự và như vậy là sắp thứ tự được.
Một ví dụ khác, xét lịch biểu mà trong đó có 3 giao tác như trong hình 1.8 Hai lịch biểu E và F trong hình (b) và (c) các giao tác được thực thi một cách độc lập và các đồ thị ưu tiên đối với lịch biểu E và F được thể hiện trong phần (d) và (e). Lịch biểu F được thể hiện trong hình 1.8(e) .Mặc dù chỉ một lịch biểu theo thứ tự tương đương với một lịch biểu theo thứ tự xung đột . Hình 1.8(f) thể hiện một đồ thị ưu tiên mà dựa vào nó xác định được 2 lịch biểu theo thứ tự tương đương
(a) Giao tác T1 Read_item(X) Write_item(X) Read_item(Y) Write_item(Y) Giao tác T2 Read_item(Z) Read_item(Y) Write_item(Y) Read_item(X) Write_item(X) Giao tác T3 Read_item(Y) Read_item(Z) Write_item(Y) Write_item(Z)
(b)
Giao tác T1 Giao tác T2 Giao tác T3 Read_item(Z) Read_item(Y) Write_item(Y) Read_item(Y) Read_item(Z) Read_item(X) Write_item(X) Thời Write_item(Y) gian Write_item(Y) Read_item(X) Read_item(Y) Write_item(Y) Write_item(X) Lịch biểu E c)
Giao tác T1 Giao tác T2 Giao tác T3 Read_item(Y) Read_item(Z) Read_item(X) Write_item(X) Write_item(Y) Write_item(Z) Read_item(Z) Read_item(Y) Write_item(Y) Read_item(Y) Read_item(Y) Write_item(X) Write_item(X) Lịch biểu F
Hình 1.8 ví dụ khác của việc kiểm tra sự tuần tự (a) các thao tác READ và WRITE của 3 giao tác T1,T2,T3 (b) lịch biểu E (c) lịch biểu F.
Thời gian
d) Y
X Đồ thị này có chu trình nên không tồn tại lịch biểu có thứ tự tương đương.
Y Y,Z
e) X, Y
T1 T2 Lịch biểu có thứ tự tương đương T3 T1 T2
T3
f)
T1 T2 Lịch biểu có thứ tự tương đương
T3 T1 T2 T3 T2 T1
T3
Hình 14.9 Ví dụ khác của việc kiểm tra sự tuần tự (d) . Đồ thị ưu tiên đối với lịch biểu E (e) Đồ thị ưu tiên đối với lịch biểu F (f) Đồ thị ưu tiên 2 lịch biểu theo thứ tự tương đương