Lesson 05 — Đồng bộ hoá (Synchronization)

1. Mô phỏng Race Condition — count++

Hai thread A và B cùng thực hiện count++. Ban đầu count = 0. Kỳ vọng: count = 2.

Bấm từng bước để xen kẽ lệnh LOAD/ADD/STORE. Quan sát kết quả khi bị xen kẽ sai chỗ.

Bật Lock (Mutex): Tắt — Race condition có thể xảy ra
Thread A (xanh)
1. LOAD regA ← count
2. ADD regA ← regA + 1
3. STORE count ← regA
Thread B (tím)
1. LOAD regB ← count
2. ADD regB ← regB + 1
3. STORE count ← regB
count = 0  |  regA = ?  |  regB = ?  |  Lock: OFF

2. Mô phỏng Test-And-Set (TAS) Spinlock

Hai thread tranh nhau vào Critical Section qua spinlock TAS. Bấm nút để thread thực hiện TAS. Thread nào TAS trả về false (lock đang mở) thì thắng — vào CS. Thread kia phải spin.

Thread 0
Idle



SHARED LOCK
🔓 OPEN
CS đang giữ bởi:
Không ai
Thread 1
Idle



// Log sự kiện xuất hiện ở đây...

3. Thuật toán Peterson — Kiểm tra từng bước

Mô phỏng thuật toán Peterson với 2 process P0 và P1. Mỗi process chạy đúng 3 bước entry: đặt flag, đặt turn, kiểm tra điều kiện chờ.

Biến chia sẻ: flag[0], flag[1] (boolean — ý định vào CS)  |  turn (int — nhường ai vào trước)

Process P0

1. flag[0] = true
2. turn = 1
3. while(flag[1] && turn==1)
Idle
TRẠNG THÁI
flag[0]: false
flag[1]: false
turn: 0
CS giữ bởi
Không ai

Process P1

1. flag[1] = true
2. turn = 0
3. while(flag[0] && turn==0)
Idle
// Nhấn các bước để thấy luồng thực thi...