Giải thuật Peterson cho 2 tiến trình (0 và 1) dùng mảng flag[2] và biến turn. Mỗi tiến trình muốn vào vùng găng (CS) sẽ đặt cờ và nhường lượt; chỉ vào được khi điều kiện chờ sai.
WANT proc: flag[proc] = true; turn = other (nhường lượt cho tiến trình kia).TRY proc: kiểm tra điều kiện chờ flag[other] == true AND turn == other. Nếu sai → vào CS thành công (entered += 1). Nếu đúng → bị chặn (blocked += 1).DROP proc: rời CS, flag[proc] = false.Trạng thái khởi tạo flag = [false, false], turn = 0. In số_lần_vào_CS số_lần_bị_chặn.
Thao tác WANT 0, TRY 0. Sau WANT 0: flag[0]=true, turn=1. TRY 0: điều kiện flag[1] && turn==1 = false && ... = false → vào được. In 1 0.
Dòng 1: m.
m dòng: proc action với proc ∈ {0,1}, action ∈ {WANT, TRY, DROP}.
1 ≤ m ≤ 10^4; proc ∈ {0,1}.
số_lần_vào_CS số_lần_bị_chặn.
Ví dụ:
Đầu vào:
2
0 WANT
0 TRY
Đầu ra:
1 0
Giải thích:
Đang tải editor...