Hai tiến trình A, B cùng cần hai mutex L1, L2. Mỗi mutex tại một thời điểm chỉ một tiến trình giữ. Thao tác X ACQ k nghĩa tiến trình X xin khoá Lk; X REL k nghĩa nhả khoá.
Quy tắc ACQ: nếu khoá đang rảnh → X chiếm; nếu khoá do chính X giữ → bỏ qua; nếu do tiến trình khác giữ → X bị chặn, chờ khoá đó.
Deadlock xảy ra khi cả hai tiến trình đồng thời đang chờ một khoá mà tiến trình kia đang giữ (chờ vòng tròn). Khi phát hiện deadlock, in DEADLOCK <số_thao_tác> (số thứ tự 1-based của thao tác gây ra) và dừng. Nếu hết thao tác mà không deadlock, in OK.
A ACQ 1; B ACQ 2; A ACQ 2 (A chờ B); B ACQ 1 (B chờ A) → deadlock tại thao tác 4 → DEADLOCK 4.
Dòng đầu: n. n dòng: X ACQ k hoặc X REL k, X∈{A,B}, k∈{1,2}.
1 ≤ n ≤ 2000.
DEADLOCK i (i là chỉ số thao tác gây deadlock) hoặc OK.
Ví dụ:
Đầu vào:
4
A ACQ 1
B ACQ 2
A ACQ 2
B ACQ 1
Đầu ra:
DEADLOCK 4
Giải thích:
Đang tải editor...