Lệnh phần cứng test-and-set (TS) đọc giá trị cũ của lock rồi ghi 1 một cách nguyên tử, trả về giá trị cũ. Spinlock dùng nó: nếu giá trị cũ là 0 thì giành được khóa; nếu là 1 thì khóa đang bận → spin (quay vòng chờ).
lock khởi tạo 0.TS tid: old = lock; đặt lock = 1. Nếu old == 0 → acquired += 1. Nếu old == 1 → spins += 1.REL tid: đặt lock = 0, released += 1.In số_lần_giành_được số_lần_spin số_lần_release.
Thao tác TS 1, TS 2, REL 1. TS 1: old=0 → giành được, lock=1. TS 2: old=1 → spin. REL 1: lock=0, released. In 1 1 1.
Dòng 1: m.
m dòng: tid action, action ∈ {TS, REL}.
1 ≤ m ≤ 10^4; tid ≥ 0.
số_lần_giành_được số_lần_spin số_lần_release.
Ví dụ:
Đầu vào:
3
1 TS
2 TS
1 REL
Đầu ra:
1 1 1
Giải thích:
Đang tải editor...