Cho hệ n tiến trình, r loại tài nguyên. Mỗi tiến trình đang giữ (Allocation) một số tài nguyên và còn cần thêm (Need/Request) một số tài nguyên để hoàn thành. Available là tài nguyên còn rảnh.
Work = Available, mọi Finish[i] = false, seq rỗng.i chưa hoàn thành mà Need[i] ≤ Work (mọi loại). Duyệt theo chỉ số tăng để tie-break (chọn chỉ số nhỏ nhất thỏa). Nếu có: Work += Allocation[i], Finish[i] = true, thêm i vào seq.Nếu mọi tiến trình hoàn thành → in SAFE và chuỗi an toàn (chỉ số tiến trình). Ngược lại in UNSAFE.
1 tiến trình, 1 loại tài nguyên, Available=[1], Alloc=[[0]], Need=[[1]]. Need[0]=1 ≤ Work=1 → chạy P0. SAFE, chuỗi 0.
Dòng 1: n r.
Dòng 2: r số Available.
Tiếp n dòng: ma trận Allocation (r số mỗi dòng).
Tiếp n dòng: ma trận Need (r số mỗi dòng).
1 ≤ n ≤ 100; 1 ≤ r ≤ 20; mọi giá trị ≥ 0 và ≤ 10^4.
Nếu an toàn: dòng 1 SAFE, dòng 2 chuỗi an toàn (chỉ số tiến trình cách nhau dấu cách). Ngược lại: UNSAFE.
Ví dụ:
Đầu vào:
1 1
1
0
1
Đầu ra:
SAFE
0
Giải thích:
Đang tải editor...