Deadlock là trạng thái mà hai hay nhiều thread cùng chờ mãi mãi một resource mà những thread kia đang giữ, nên không thread nào tiến được. Nó cần bốn điều kiện xảy ra đồng thời (điều kiện Coffman).
Deadlock là trạng thái mà hai hay nhiều thread cùng chờ mãi mãi một resource mà những thread kia đang giữ, nên không thread nào tiến được. Nó cần bốn điều kiện xảy ra đồng thời (điều kiện Coffman).
Phá bất kỳ điều kiện nào thì deadlock không thể xảy ra.
Thread 1 giữ A, muốn B ─┐
├─ circular wait → deadlock
Thread 2 giữ B, muốn A ─┘
# DEADLOCK: các thread lock theo thứ tự ngược nhau
def t1():
with lockA:
with lockB: ... # T1: A rồi B
def t2():
with lockB:
with lockA: ... # T2: B rồi A ← vòng lặp!
# SỬA: áp một thứ tự lock toàn cục (luôn A trước B)
def safe():
with lockA:
with lockB: ... # ai cũng acquire theo cùng thứ tự
tryAcquire(timeout), lùi lại rồi thử lại — phá hold-and-wait.Deadlock đóng băng hệ thống một cách âm thầm — không crash, chỉ là request treo. Gọi tên được bốn điều kiện cho thấy bạn lý giải được vì sao nó xảy ra và chọn được biện pháp ngăn chặn trúng đích (thường là lock ordering nhất quán), thay vì rải lock bừa và cầu may.
Thư viện câu hỏi phỏng vấn IT với đáp án chi tiết — từ Junior đến Senior.
Ủng hộ