JavaScript is required

Giao dịch Ti đọc và ghi đối tượng A ký hiệu là Ri(A) và Wi( A). Anh/chị hãy xem xét khả năng tuần tự hoá của lịch trình đọc và ghi các giao dịch sau: R1(A) R2(B) W1(A) W2(B) R1(B) R2(C) W1(B) W1(C)?

A.
Tuần tự hoá được.
B.
Không tuần tự được.
C.
Chỉ là nối tiếp.
D.
Có xung đột
Trả lời:

Đáp án đúng: B


Để xác định khả năng tuần tự hóa của lịch trình, ta cần tìm các xung đột ghi-ghi (Write-Write - WW), đọc-ghi (Read-Write - RW) và ghi-đọc (Write-Read - WR) giữa các giao dịch. Lịch trình đã cho là: R1(A) R2(B) W1(A) W2(B) R1(B) R2(C) W1(B) W1(C). 1. **R1(A) ... W1(A)**: Giao dịch 1 đọc A, sau đó ghi A. Không có xung đột với giao dịch khác ở đây. 2. **R2(B) ... W2(B)**: Giao dịch 2 đọc B, sau đó ghi B. Không có xung đột với giao dịch khác ở đây. 3. **W1(A)**: Giao dịch 1 ghi A. 4. **W2(B)**: Giao dịch 2 ghi B. 5. **R1(B)**: Giao dịch 1 đọc B. 6. **R2(C)**: Giao dịch 2 đọc C. 7. **W1(B)**: Giao dịch 1 ghi B. 8. **W1(C)**: Giao dịch 1 ghi C. Bây giờ, ta xem xét xung đột giữa các giao dịch: * **Giao dịch 1 và 2**: * R2(B) ... W1(B): Giao dịch 2 đọc B trước khi giao dịch 1 ghi B (RW conflict). * W2(B) ... R1(B): Giao dịch 2 ghi B trước khi giao dịch 1 đọc B (WR conflict). Vì có các xung đột, ta cần kiểm tra xem có thể tạo ra một đồ thị ưu tiên (precedence graph) hay không. Các cạnh trong đồ thị sẽ chỉ ra thứ tự các giao dịch phải được thực hiện để duy trì tính tuần tự hóa. Từ các xung đột trên, ta có: * Từ R2(B) ... W1(B): Giao dịch 2 phải xảy ra trước giao dịch 1 (T2 -> T1). * Từ W2(B) ... R1(B): Giao dịch 2 phải xảy ra trước giao dịch 1 (T2 -> T1). Không có chu trình trong đồ thị ưu tiên (chỉ có T2 -> T1), do đó lịch trình này là tuần tự hóa được (serializable).

Câu hỏi liên quan