2.8 Đồng Bộ Hóa Tiến Trình (Process Synchronization)
Vấn đề phát sinh khi nhiều Process/Thread (mục 2.2) cùng truy cập chung 1 tài nguyên — đặc biệt khi dùng Shared Memory (mục 2.7).
| Khái niệm | Giải thích |
|---|---|
| Race Condition | Tình huống nhiều process/thread cùng đọc/ghi 1 dữ liệu chung cùng lúc, kết quả cuối phụ thuộc vào thứ tự thực thi (không đoán trước được) → gây lỗi khó tái hiện |
| Critical Section | Đoạn code truy cập vào tài nguyên dùng chung, cần đảm bảo chỉ 1 process/thread được vào tại 1 thời điểm |
| Mutex (Mutual Exclusion) | Cơ chế khóa đảm bảo chỉ 1 thread được vào Critical Section cùng lúc — giống như "chìa khóa" chỉ có đúng 1 bản |
| Semaphore | Biến đếm cho phép giới hạn số lượng thread được vào cùng lúc (khác Mutex chỉ cho 1 duy nhất), dùng khi có nhiều bản tài nguyên giống nhau (VD: 3 kết nối database cùng lúc) |
| Deadlock | Tình trạng các process khóa lẫn nhau, chờ đợi vô thời hạn, không process nào chạy tiếp được |
4 điều kiện xảy ra Deadlock (Coffman conditions) — chỉ khi cả 4 cùng xảy ra thì Deadlock mới xuất hiện:
- Mutual Exclusion: tài nguyên chỉ có thể được dùng bởi 1 process tại 1 thời điểm
- Hold and Wait: process đang giữ 1 tài nguyên trong khi chờ thêm tài nguyên khác
- No Preemption: không thể ép process nhả tài nguyên đang giữ
- Circular Wait: các process chờ nhau theo vòng tròn khép kín (A chờ B, B chờ C, C chờ A)
Cách xử lý Deadlock:
- Prevention: chủ động phá vỡ 1 trong 4 điều kiện trên
- Avoidance: dùng thuật toán (VD: Banker's Algorithm) để dự đoán và tránh trước khi cấp phát tài nguyên
- Detection & Recovery: để deadlock xảy ra, sau đó phát hiện và hủy/khôi phục process liên quan
Liên kết: Race Condition là vấn đề, Mutex/Semaphore là công cụ giải quyết, Deadlock là rủi ro phát sinh nếu dùng Mutex/Semaphore không cẩn thận (khóa chồng khóa). Đây là hệ quả trực tiếp của việc nhiều Process/Thread (2.2) chia sẻ tài nguyên qua IPC (2.7).