Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Hệ điều hành] Test-and-set — chuỗi thao tác spinlock

    Test-and-Set — chuỗi thao tác spinlock

    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ờ).

    Mô phỏng

    • 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.

    Ví dụ

    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.

    • Định dạng đầu vào:

      Dòng 1: m. m dòng: tid action, action ∈ {TS, REL}.

    • Ràng buộc đầu vào:

      1 ≤ m ≤ 10^4; tid ≥ 0.

    • Định dạng đầu ra:

      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:

    lock=0. TS 1: old=0 → giành được (acquired=1), lock=1. TS 2: old=1 → spin (spins=1). REL 1: lock=0, released=1. In `1 1 1`.

    Đang tải editor...