Tôi muốn có thể khóa dựa trên hệ thống phân cấp hệ thống tệp. Ví dụ:Khóa mutex phân cấp trong Java
Chủ đề 1:
lock("/");
doStuff();
unlock();
Chủ đề 2:
lock("/sub/foo");
doStuff();
unlock();
Chủ đề 3:
lock("/sub/bar");
doStuff();
unlock();
Nếu Chủ đề 1 mua lại khóa đầu tiên sau đó đề 2 và 3 sẽ bị chặn cho đến khi Thread 1 mở khóa. Tuy nhiên, nếu Thread 2 mua lại khóa đầu tiên, thì Thread 3 sẽ có thể thực hiện cùng lúc với Thread 2. Quy tắc chung là nếu có khóa trên thư mục cha, thì thread phải chặn.
Java có tích hợp bất cứ thứ gì có thể giúp giải quyết vấn đề này không? Tôi muốn tránh lưu trữ một khóa cho mỗi thư mục vì sẽ có hàng trăm ngàn thư mục.
+1 cho một câu hỏi thú vị nghiêm túc. Cấu trúc thư mục được chỉ định trước hay có thể tạo các tệp "ad-hoc" không? Ngoài ra, hệ thống ưu tiên là gì nếu một luồng muốn lấy thư mục gốc trong khi nhiều chủ đề khác cố gắng lấy các tệp riêng lẻ?Liệu sợi chỉ muốn gốc chỉ chết đói, hay có một số loại bảo đảm bạn có trong tâm trí? – templatetypedef
Tôi giả sử rằng nếu Thread 2 mua lại khóa, Thread 1 sẽ chặn, phải không? – Irfy
Một phần của động lực đằng sau việc này là sửa đổi hệ thống tệp, vì vậy các đường dẫn sẽ liên tục thay đổi. Tôi không chắc chắn làm thế nào để xử lý đói đói ... đó là một cái gì đó tôi đã không thực sự xem xét. Tôi cho rằng cơ chế khóa đọc/ghi có thể tiến gần đến việc giải quyết vấn đề này và có thể xử lý các luồng không bị đói. –