Cho phép nhiều hơn một giao dịch có thể truy cập trên cùng một mục giữ liệu X nếu các giao dịch đó chỉ đọc dữ liệu.
26
Nếu một giao dịch muốn thực hiện ghi trên mục dữ liệu X, nó phải có độc quyền truy cập trên X.
Một khóa trên mục dữ liệu X: LOCK(X) có 3 trạng thái: “read – locked” (“share – locked”), “write – locked” (“exclusive – locked”) và “unlocked”.
Các thao tác: read_lock, write_lock, unlock được sử dụng với khóa đọc – ghi.
Trong mô hình khóa đọc – ghi, một bản ghi trong bảng khóa (Lock Table) gồm 4 trường:
Data item name LOCK No_of_reads Locking Transactions
o Data item name: Tên mục dữ liệu.
o LOCK: read_locked hoặc write_locked.
o Nếu LOCK là write_locked: Locking transactions là một giao dịch duy nhất đang giữ khóa ghi trên mục dữ liệu.
o Nếu LOCK là read_locked: Locking transactions là một danh sách các giao dịch giữ khóa đọc trên mục dữ liệu. No_of_reads: Số lượng các giao dịch đang giữ khóa đọc trên X.
Trong mô hình khóa đọc – ghi, mọi giao dịch phải tuân theo các luật sau:
o Một giao dịch phải thực hiện read_lock(X) hoặc write_lock(X) trước khi read_item(X).
o Một giao dịch phải thực hiện write_lock(X) trước khi write_item(X).
o Một giao dịch phải thực hiện unlock_item(X) sau khi đã hoàn tất các thao tác read_item(X), write_item(X).
o Một giao dịch không được thực hiện read_lock(X) nếu nó đang giữ khóa đọc, hoặc ghi trên X (Hold the lock).1
o Một giao dịch không được thực hiện write_lock(X) nếu nó đang giữ một khóa đọc trên X.1
o Một giao dịch không được thực hiện unlock_item(X) nếu nó không giữ khóa trên X.
Hình 4.1 dưới đây chỉ ra quá trình xử lý yêu cầu khóa trong mô hình khóa chia sẻ - độc quyền.
1
27
Hình 4.1: Xử lý yêu cầu khóa trong mô hình khóa chia sẻ – độc quyền